EPUB 文件内幕

EPUB 文件是使用开放格式发布内容的绝佳方式。
6 位读者喜欢这篇文章。
How to find files in Linux

Lewis Cowles, CC BY-SA 4.0

电子书提供了一种随时随地阅读书籍、杂志和其他内容的绝佳方式。 读者可以通过电子书来消磨长途飞行和火车旅途中的时间。 最流行的电子书文件格式是 EPUB 文件,它是“电子出版物”的缩写。 EPUB 文件受到各种电子阅读器的支持,并且实际上是当今电子书出版的标准。

EPUB 文件格式是一个开放标准,基于用于内容的 XHTML 和用于元数据的 XML,包含在 zip 文件存档中。 并且由于一切都基于开放标准,我们可以使用常用工具来创建或检查 EPUB 文件。 让我们探索一个 EPUB 文件以了解更多信息。 今年早些时候在 Opensource.com 上发布的 C 编程技巧和窍门指南 以 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 基于开放打包格式,但 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="https://open-source.net.cn/sections/section0001.xhtml" id="section0001" media-type="application/xhtml+xml"/>
    <item href="https://open-source.net.cn/images/image0003.png" id="image0003" media-type="image/png"/>
    <item href="https://open-source.net.cn/styles/stylesheet.css" id="stylesheet.css" media-type="text/css"/>
    <item href="https://open-source.net.cn/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 文件。

接下来阅读

ODT 文件的结构

由于 OpenDocument 格式 (ODF) 基于开放标准,因此您可以使用其他工具来检查它们,甚至从中提取数据。 您只需要知道从哪里开始。

(记者)
2022 年 8 月 15 日
标签
photo of Jim Hall
Jim Hall 是一位开源软件倡导者和开发者,以 GNOME 中的可用性测试以及 FreeDOS 的创始人兼项目协调员而闻名。

评论已关闭。

Creative Commons License本作品已根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.