Linux中國

深入了解 EPUB 文件

EPUB 文件是使用開放格式發布內容的好方法。

電子書提供了一種隨時隨地閱讀書籍、雜誌和其他內容的好方法。讀者可以在長途飛行和乘坐火車時享受電子書打發時間。最流行的電子書文件格式是 EPUB 文件,它是「 電子出版物 electronic publication 」的縮寫。 EPUB 文件受到各種電子閱讀器的支持,並且是當今電子書出版的有效標準。

EPUB 文件格式基於 XHTML 內容和 XML 元數據的開放標準,包含在 zip 存檔中。由於一切都基於開放標準,我們可以使用通用工具來創建或檢查 EPUB 文件。讓我們探索一個 EPUB 文件以了解更多信息。《C 編程技巧和竅門指南》,於今年早些時候在 Opensource.com 上發布,提供 PDF 或 EPUB 格式。

因為 EPUB 文件是放在 zip 文件中的 XHTML 內容和 XML 元數據,所以你可以用 unzip 命令在命令行檢查 EPUB:

$ unzip -l osdc_Jim-Hall_C-Programming-Tips.epub 
Archive: osdc_Jim-Hall_C-Programming-Tips.epub
Length Date Time Name
--------- ---------- ----- -20 06-23-2022 00:20 mimetype
8259 06-23-2022 00:20 OEBPS/styles/stylesheet.css
1659 06-23-2022 00:20 OEBPS/toc.xhtml
4460 06-23-2022 00:20 OEBPS/content.opf
44157 06-23-2022 00:20 OEBPS/sections/section0018.xhtml
1242 06-23-2022 00:20 OEBPS/sections/section0002.xhtml
22429 06-23-2022 00:20 OEBPS/sections/section0008.xhtml
[...]
9628 06-23-2022 00:20 OEBPS/sections/section0016.xhtml
748 06-23-2022 00:20 OEBPS/sections/section0001.xhtml
3370 06-23-2022 00:20 OEBPS/toc.ncx
8308 06-23-2022 00:21 OEBPS/images/image0011.png
6598 06-23-2022 00:21 OEBPS/images/image0009.png
[...]
14492 06-23-2022 00:21 OEBPS/images/image0005.png
239 06-23-2022 00:20 META-INF/container.xml
--------- ----959201 41 files

這個 EPUB 包含很多文件,但其中大部分是內容。要了解 EPUB 文件是如何組合在一起的,請遵循電子書閱讀器的流程:

1、電子書閱讀器需要驗證 EPUB 文件是否真的是 EPUB 文件。他們通過檢查 EPUB 存檔根目錄中的 mimetype 文件來驗證文件。該文件僅包含一行描述 EPUB 文件的 MIME 類型:

application/epub+zip

2、為了定位內容,電子書閱讀器從 META-INF/container.xml 文件開始。這是一個簡短的 XML 文檔,指示在哪裡可以找到內容。對於此 EPUB 文件,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 文件更易於閱讀,我將單行拆分為多行,並添加了一些間距來縮進每行。XML 文件並不關心新行和空格等額外的空白,因此這種額外的間距不會影響 XML 文件。

3、container.xml 文件表示 EPUB 的根從 OEBPS 目錄中的 content.opf 文件開始。OPF 擴展名是因為 EPUB 基於 「 開放打包格式 Open Packaging Format 」,但 content.opf 文件實際上只是另一個 XML 文件。

4、content.opf 文件包含一個完整的 EPUB 內容清單,以及一個有序的目錄,以及查找每一章或每一節的引用。這個 EPUB 的 content.opf 文件很長,因此我將在此僅展示一小部分作為示例。

XML 數據包含在 <package> 塊中,該塊本身具有 <metadata> 塊、<manifest> 數據和包含電子書目錄的 <spine> 塊:

<?xml version="1.0" encoding="UTF-8"?>
<package unique-identifier="unique-identifier" version="3.0" xmlns="http://www.idpf.org/2007/opf" xmlns_dc="http://purl.org/dc/elements/1.1/" xmlns_dcterms="http://purl.org/dc/terms/" xmlns_opf="http://www.idpf.org/2007/opf">
  <metadata>
    <dc:identifier id="unique-identifier">osdc002</dc:identifier>
    <dc:title>Tips and Tricks for C Programming</dc:title>
    <dc:creator>Jim Hall</dc:creator>
    <dc:language>English</dc:language>
    <meta property="dcterms:modified">2022-06-23T12:09:13Z</meta>
    <meta content="LibreOffice/7.3.0.3$Linux_X86_64 LibreOffice_project/0f246aa12d0eee4a0f7adcefbf7c878fc2238db3 (libepubgen/0.1.1)" name="generator"/>
  </metadata>
  <manifest>
    ...
    <item href="sections/section0001.xhtml" id="section0001" media-type="application/xhtml+xml"/>
    <item href="images/image0003.png" id="image0003" media-type="image/png"/>
    <item href="styles/stylesheet.css" id="stylesheet.css" media-type="text/css"/>
    <item href="toc.ncx" id="toc.ncx" media-type="application/x-dtbncx+xml"/>
    ...
  </manifest>
  <spine toc="toc.ncx">
    <itemref idref="section0001"/>
    <itemref idref="section0002"/>
    <itemref idref="section0003"/>
    ...
  </spine>
</package>

你可以把數據匹配起來,看看在哪裡可以找到每個部分。EPUB 閱讀器就是這樣做的。例如,目錄中的第一項引用了 section0001,它在清單中被定義為位於 sections/section0001.xhtml 文件中。該文件的名稱不需要與 idref 條目相同,但 LibreOffice Writer 的自動程序就是這樣創建該文件的。(你可以在元數據中看到,這個 EPUB 是在 Linux 上用 LibreOffice 7.3.0.3 版本創建的,它可以將內容導出為 EPUB 文件。)

EPUB 格式

EPUB 文件是一種使用開放格式發布內容的好方法。EPUB 文件格式是 XML 元數據與 XHTML 內容,包含在一個 zip 文件內。雖然大多數技術作家使用工具來創建 EPUB 文件,因為 EPUB 是基於開放標準,意味著你可以使用其他方式創建自己的 EPUB 文件。

via: https://opensource.com/article/22/8/epub-file

作者:Jim Hall 選題:lkxed 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    這個站點使用 Akismet 來減少垃圾評論。了解你的評論數據如何被處理

    More in:Linux中國

    Linux中國

    關於Linux防火牆iptables的面試問答

    Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
    Linux中國

    Lets Encrypt 已被所有主流瀏覽器所信任

    旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...
    Linux中國

    SSL/TLS 加密新紀元 – Lets Encrypt

    根據 Let's Encrypt 官方博客消息,Let's Encrypt 服務將在下周(11 月 16 日)正式對外開放。 Let's Encrypt 項目是由互聯網安全研究小組(ISRG,Internet Security Research Group)主導並開發的一個新型數字證書認證機構(CA,Certificate ...