深入了解 EPUB 文件
電子書(shū)提供了一種隨時(shí)隨地閱讀書(shū)籍、雜志和其他內(nèi)容的好方法。讀者可以在長(zhǎng)途飛行和乘坐火車(chē)時(shí)享受電子書(shū)打發(fā)時(shí)間。最流行的電子書(shū)文件格式是 EPUB 文件,它是“電子出版物electronic publication”的縮寫(xiě)。 EPUB 文件受到各種電子閱讀器的支持,并且是當(dāng)今電子書(shū)出版的有效標(biāo)準(zhǔn)。
EPUB 文件格式基于 XHTML 內(nèi)容和 XML 元數(shù)據(jù)的開(kāi)放標(biāo)準(zhǔn),包含在 zip 存檔中。由于一切都基于開(kāi)放標(biāo)準(zhǔn),我們可以使用通用工具來(lái)創(chuàng)建或檢查 EPUB 文件。讓我們探索一個(gè) EPUB 文件以了解更多信息?!??C 編程技巧和竅門(mén)指南???》,于今年早些時(shí)候在 ??Opensource.com?? 上發(fā)布,提供 PDF 或 EPUB 格式。
因?yàn)?EPUB 文件是放在 zip 文件中的 XHTML 內(nèi)容和 XML 元數(shù)據(jù),所以你可以用 ??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
這個(gè) EPUB 包含很多文件,但其中大部分是內(nèi)容。要了解 EPUB 文件是如何組合在一起的,請(qǐng)遵循電子書(shū)閱讀器的流程:
1、電子書(shū)閱讀器需要驗(yàn)證 EPUB 文件是否真的是 EPUB 文件。他們通過(guò)檢查 EPUB 存檔根目錄中的 ??mimetype?
? 文件來(lái)驗(yàn)證文件。該文件僅包含一行描述 EPUB 文件的 MIME 類(lèi)型:
application/epub+zip
2、為了定位內(nèi)容,電子書(shū)閱讀器從 ??META-INF/container.xml?
?? 文件開(kāi)始。這是一個(gè)簡(jiǎn)短的 XML 文檔,指示在哪里可以找到內(nèi)容。對(duì)于此 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?
? 文件更易于閱讀,我將單行拆分為多行,并添加了一些間距來(lái)縮進(jìn)每行。XML 文件并不關(guān)心新行和空格等額外的空白,因此這種額外的間距不會(huì)影響 XML 文件。
3、??container.xml?
?? 文件表示 EPUB 的根從 ??OEBPS?
?? 目錄中的 ??content.opf?
?? 文件開(kāi)始。OPF 擴(kuò)展名是因?yàn)?EPUB 基于 “開(kāi)放打包格式Open Packaging Format”,但 ??content.opf?
? 文件實(shí)際上只是另一個(gè) XML 文件。
4、??content.opf?
?? 文件包含一個(gè)完整的 EPUB 內(nèi)容清單,以及一個(gè)有序的目錄,以及查找每一章或每一節(jié)的引用。這個(gè) EPUB 的 ??content.opf?
? 文件很長(zhǎng),因此我將在此僅展示一小部分作為示例。
XML 數(shù)據(jù)包含在 ??<package>?
?? 塊中,該塊本身具有 ??<metadata>?
?? 塊、??<manifest>?
?? 數(shù)據(jù)和包含電子書(shū)目錄的 ??<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>
你可以把數(shù)據(jù)匹配起來(lái),看看在哪里可以找到每個(gè)部分。EPUB 閱讀器就是這樣做的。例如,目錄中的第一項(xiàng)引用了 ??section0001?
??,它在清單中被定義為位于 ??sections/section0001.xhtml?
?? 文件中。該文件的名稱(chēng)不需要與 ??idref?
? 條目相同,但 LibreOffice Writer 的自動(dòng)程序就是這樣創(chuàng)建該文件的。(你可以在元數(shù)據(jù)中看到,這個(gè) EPUB 是在 Linux 上用 LibreOffice 7.3.0.3 版本創(chuàng)建的,它可以將內(nèi)容導(dǎo)出為 EPUB 文件。)
EPUB 格式
EPUB 文件是一種使用開(kāi)放格式發(fā)布內(nèi)容的好方法。EPUB 文件格式是 XML 元數(shù)據(jù)與 XHTML 內(nèi)容,包含在一個(gè) zip
文件內(nèi)。雖然大多數(shù)技術(shù)作家使用工具來(lái)創(chuàng)建 EPUB 文件,因?yàn)?EPUB 是基于開(kāi)放標(biāo)準(zhǔn),意味著你可以使用其他方式創(chuàng)建自己的 EPUB 文件。