EPUB是目前最常见的开放电子书格式,它和XML有着非常紧密的关系。简单来说,EPUB文件本身是一个ZIP压缩包,而压缩包里绝大多数描述结构和内容的文件都是XML格式。比如容器定义、文件清单、章节正文都用XML书写,因此理解XML是理解EPUB的基础。

XML与EPUB的具体关系
EPUB标准规定使用XML来承载书籍的元数据与内容。以下几个核心文件都是XML:
mimetype:纯文本声明文件类型,不是XML但必须放根目录。META-INF/container.xml:告诉阅读器OPF文件的位置,是标准XML。content.opf:包装文件,用XML记录书名、作者和文件清单。toc.ncx或nav.xhtml:目录文件,基于XML描述章节层级。- 章节正文:通常是XHTML,即符合XML规则的HTML。
可以看到,没有XML就没有EPUB的现代结构。XML提供的严格嵌套和标签语义,使电子书能被不同阅读器稳定解析。
如何制作一个简单的EPUB
我们完全可以手工制作最小可用的EPUB。步骤如下:
第一步:准备目录与文件
新建文件夹,在里面放mimetype、META-INF/container.xml、content.opf、chapter1.xhtml。
第二步:编写关键XML
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="content.opf" media-type="application/oebps-package+xml"/>
</rootfiles>
</container>
content.opf示例:
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="bookid">
<metadata>
<dc:identifier id="bookid" xmlns:dc="http://purl.org/dc/elements/1.1/">urn:uuid:12345</dc:identifier>
<dc:title xmlns:dc="http://purl.org/dc/elements/1.1/">测试书</dc:title>
<dc:language xmlns:dc="http://purl.org/dc/elements/1.1/">zh</dc:language>
</metadata>
<manifest>
<item id="c1" href="chapter1.xhtml" media-type="application/xhtml+xml"/>
</manifest>
<spine>
<itemref idref="c1"/>
</spine>
</package>
chapter1.xhtml示例:
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>第一章</title></head>
<body>
<h1>你好,EPUB</h1>
<p>这是一个用XML写成的章节。</p>
</body>
</html>
第三步:打包为EPUB
先写mimetype内容为application/epub+zip,然后按以下命令压缩,注意mimetype必须不压缩且放最前:
zip -X0 测试书.epub mimetype zip -Xrg 测试书.epub META-INF content.opf chapter1.xhtml
这样生成的测试书.epub就能被多数阅读器打开。通过上面过程可以看到,制作EPUB其实就是按规则写XML再打包,门槛并不高。
小结
XML是EPUB格式的骨架,EPUB借助XML实现内容与结构分离。只要理清container.xml、OPF和XHTML之间的关系,任何人都能用基础工具做出电子书。