Redian新闻
>
深入了解 EPUB 文件 | Linux 中国

深入了解 EPUB 文件 | Linux 中国

科技
 
导读:EPUB 文件是使用开放格式发布内容的好方法。                                   
本文字数:4515,阅读时长大约:5分钟

EPUB 文件是使用开放格式发布内容的好方法。

电子书提供了一种随时随地阅读书籍、杂志和其他内容的好方法。读者可以在长途飞行和乘坐火车时享受电子书打发时间。最流行的电子书文件格式是 EPUB 文件,它是“电子出版物(electronic publication)”的缩写。EPUB 文件受到各种电子阅读器的支持,并且是当今电子书出版的有效标准。

EPUB 文件格式基于 XHTML 内容和 XML 元数据的开放标准,包含在 zip 存档中。由于一切都基于开放标准,我们可以使用通用工具来创建或检查 EPUB 文件。让我们探索一个 EPUB 文件以了解更多信息。《C 编程技巧和窍门指南🔗 opensource.com》,于今年早些时候在 Opensource.com🔗 Opensource.com 上发布,提供 PDF 或 EPUB 格式。

因为 EPUB 文件是放在 zip 文件中的 XHTML 内容和 XML 元数据,所以你可以用 unzip 命令在命令行检查 EPUB:

  1. $ unzip -l osdc_Jim-Hall_C-Programming-Tips.epub
  2. Archive: osdc_Jim-Hall_C-Programming-Tips.epub
  3. Length Date Time Name
  4. --------- ---------- ----- ----
  5. 20 06-23-2022 00:20 mimetype
  6. 8259 06-23-2022 00:20 OEBPS/styles/stylesheet.css
  7. 1659 06-23-2022 00:20 OEBPS/toc.xhtml
  8. 4460 06-23-2022 00:20 OEBPS/content.opf
  9. 44157 06-23-2022 00:20 OEBPS/sections/section0018.xhtml
  10. 1242 06-23-2022 00:20 OEBPS/sections/section0002.xhtml
  11. 22429 06-23-2022 00:20 OEBPS/sections/section0008.xhtml
  12. [...]
  13. 9628 06-23-2022 00:20 OEBPS/sections/section0016.xhtml
  14. 748 06-23-2022 00:20 OEBPS/sections/section0001.xhtml
  15. 3370 06-23-2022 00:20 OEBPS/toc.ncx
  16. 8308 06-23-2022 00:21 OEBPS/images/image0011.png
  17. 6598 06-23-2022 00:21 OEBPS/images/image0009.png
  18. [...]
  19. 14492 06-23-2022 00:21 OEBPS/images/image0005.png
  20. 239 06-23-2022 00:20 META-INF/container.xml
  21. --------- -------
  22. 959201 41 files

这个 EPUB 包含很多文件,但其中大部分是内容。要了解 EPUB 文件是如何组合在一起的,请遵循电子书阅读器的流程:

1、电子书阅读器需要验证 EPUB 文件是否真的是 EPUB 文件。他们通过检查 EPUB 存档根目录中的 mimetype 文件来验证文件。该文件仅包含一行描述 EPUB 文件的 MIME 类型:

  1. application/epub+zip

2、为了定位内容,电子书阅读器从 META-INF/container.xml 文件开始。这是一个简短的 XML 文档,指示在哪里可以找到内容。对于此 EPUB 文件,container.xml 文件如下所示:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
  3. <rootfiles>
  4. <rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml"/>
  5. </rootfiles>
  6. </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> 块:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <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">
  3. <metadata>
  4. <dc:identifier id="unique-identifier">osdc002</dc:identifier>
  5. <dc:title>Tips and Tricks for C Programming</dc:title>
  6. <dc:creator>Jim Hall</dc:creator>
  7. <dc:language>English</dc:language>
  8. <meta property="dcterms:modified">2022-06-23T12:09:13Z</meta>
  9. <meta content="LibreOffice/7.3.0.3$Linux_X86_64 LibreOffice_project/0f246aa12d0eee4a0f7adcefbf7c878fc2238db3 (libepubgen/0.1.1)" name="generator"/>
  10. </metadata>
  11. <manifest>
  12. ...
  13. <item href="sections/section0001.xhtml" id="section0001" media-type="application/xhtml+xml"/>
  14. <item href="images/image0003.png" id="image0003" media-type="image/png"/>
  15. <item href="styles/stylesheet.css" id="stylesheet.css" media-type="text/css"/>
  16. <item href="toc.ncx" id="toc.ncx" media-type="application/x-dtbncx+xml"/>
  17. ...
  18. </manifest>
  19. <spine toc="toc.ncx">
  20. <itemref idref="section0001"/>
  21. <itemref idref="section0002"/>
  22. <itemref idref="section0003"/>
  23. ...
  24. </spine>
  25. </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中国 荣誉推出


LCTT 译者 :geekpi
💎💎💎💎
翻译: 1758.5 篇
|
贡献: 3226 天
2013-10-25
2022-08-25
https://linux.cn/lctt/geekpi
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
(书)偷听者--Secret ListenerFedora Linux 37 即将正式支持树莓派 4 | Linux 中国如何在基于 Ubuntu 的 Linux 发行版上安装最新的 Vim 9.0 | Linux 中国在 Linux 中隐藏文件和文件夹的那些事 | Linux 中国关于 Linux 和 Git 的创造者 Linus Torvalds 的 20 件趣事 | Linux 中国Kuro:非官方的微软 To-Do Linux 桌面客户端 | Linux 中国Linux 上静态链接库工作原理 | Linux 中国星际战机:配备 4K 10 位 IPS 显示屏的 Linux 笔记本电脑即将问世 | Linux 中国在 Linux 上使用 Bash 创建一个临时文件 | Linux 中国诺基亚勒令一个开源 Linux 手机项目 “NOTKIA” 改名字 | Linux 中国Tuxedo 已对所有用户开放基于 Ubuntu 的 TUXEDO OS | Linux 中国在 Linux 中找到你的路由器的 IP 地址(默认网关) | Linux 中国【友情宣传】荣耀简历投递即将截止!10月13日专场招聘会带你深入了解荣耀!如何在 Linux 上动态链接模块库 | Linux 中国如何使用 Linux sed 命令自动进行文件编辑 | Linux 中国(书)特工索尼亚用 ranger 在 Linux 终端管理你的文件 | Linux 中国如何在 Ubuntu/Linux 和 Windows 之间共享文件夹 | Linux 中国GNOME “文件”引入最受欢迎的功能:“新建文件”菜单 | Linux 中国如何在 Ubuntu Linux 上更新谷歌 Chrome | Linux 中国西江月:且把心情调整如何在 Linux 中实时监控日志文件(桌面和服务器) | Linux 中国又有 Linux 开发者加入微软,这次是 systemd 的创建者 | Linux 中国上海宣布胜利了,大家都松了一口气修复 Ubuntu Linux 中 “Command ‘python’ not found” 的错误 | Linux 中国准备好在 Debian Linux 上获得 Ubuntu MATE 的体验吧! | Linux 中国如何在 Linux 中更改 GRUB 主题 | Linux 中国有了扩展,GNOME Web 正逐渐成为 Linux 桌面上一个有吸引力的选择 | Linux 中国深入了解马萨诸塞州租赁市场:十月版一个适用于苹果芯片的原生 Linux GPU 驱动程序几乎就绪! | Linux 中国检查 Linux 磁盘使用情况 | Linux 中国来自今年斩获38分的STTT的超重磅综述,带你深入了解炎症与肿瘤!如何在 Linux 中使用 Pandoc 转换文件格式 | Linux 中国Hoka One One在 VirtualBox 安装 Arch Linux 的新手操作指南 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。