使用 HTML5、CSS3 和 MathML 在 EPUB 3 中制作版式丰富的出版物

探索用于高级排版和印刷的新一代开放电子书标准

EPUB 3.0 是最新的行业标准 XML 电子书格式,它采用了 HTML5 和 CSS3,因而融入了现代 Web 技术。它重点关注 XML 驱动的工具包,要求 XHTML 序列化,还增加了补充性的 XML 词汇,例如 MathML 和 SVG。EPUB 3 提供了多种开发先进的原生数字出版物的选项。在这篇文章中,您将学习如何利用 EPUB 3 中的部分新特性来制作具有版式丰富的页面。

Liza Daly, 软件工程师和企业家, Safari Books Online

2012 年 6 月 04 日

  • +内容

简介

EPUB 是由 International Digital Publishing Forum (IDPF) 标准化的一种 XML 格式,用于可重排版电子书和出版物。截至 2009,EPUB 2 是大多数主流电子书零售商和阅读系统使用的事实上的标准格式。

EPUB ZIP 存档打包为定义良好的结构。每个组件都有自己的规范,根据按照通用 EPUB 标签进行统一:

容器规范
定义 EPUB 文档的打包方法。
EPUB 出版物
包含有关电子书内容的全部元数据,其中包括:包清单、基本标题、作者元数据,在 EPUB 3 中,还包括出版物预期支持的高级特性的定义,例如 JavaScript 或 MathML。这类出版物也称为 开放容器格式文件
EPUB 内容文档
构成出版物内容的实际 XHTML 和 CSS 文件。内容文档还包括二进制资源,例如图像、多媒体,可能还包括外部定义的 XML 文档。

常用缩写

  • CSS:层叠式样式表
  • DTD:文档类型定义
  • HTML:超文本标记语言
  • JAR:Java 存档
  • OPF:开放打包格式
  • SVG:可缩放矢量图形
  • XHTML:可扩展超文本标记语言
  • XML:可扩展标记语言
  • XSLT:可扩展样式表语言转换

本文探讨了部分 EPUB 3 特性。您将学习有关验证 EPUB 3 文档、导航和层次结构、开发指南的内容。本文提供了一个示例,将指导您了解将儿童书籍中的一页调整为 EPUB 3 的过程。另外您还能了解到如何在出版物中包含 MathML。

下载 本文中使用的示例。

先决条件

本文中的样例代码和示例假设读者对 EPUB 2 规范和基于 XML 的出版物有基本认识。有关 EPUB 2 的具体信息,请参见 参考资料。

 

EPUB 3 中的变更

EPUB 2 提供了 HTML4 和 CSS2 的所有格式化和排版功能,足以满足包含大量文本的出版物的要求。不过,出版商和作者可能会发现,EPUB 2 无法处理许多内容类型和用例,例如多媒体图书、采用复杂版式的图书、数学出版物和交互式文档。2011 年 10 月,IDPF 和电子书社区发布了 EPUB 3 规范。

EPUB 3 阅读系统

截至 2011 年 12 月,尚无正式支持 EPUB 3 的阅读系统。不过,许多使用支持 HTML5 的浏览器引擎编写的阅读系统(例如 WebKit)均支持大多数 EPUB 3 内容文档规范。建议您使用基于现代 HTML 呈现引擎的最新浏览器来测试和开发 EPUB 3 文档。

本文包含在不具备完整 EPUB 3 阅读系统的情况下,创建无害填充内容 (shim) 以生成兼容 EPUB 3 的输出的一些技巧。

EPUB 2 过渡到 EPUB 3 之后的主要变化包括:

  • EPUB 3 内容文档必需的架构从 XHTML 1.1 变为 HTML5 的 XHTML 序列化。为了包含 HTML5 中的多媒体元素( 和 ),这是必不可少的。
  • EPUB 3 中的 CSS 容许使用范围从 CSS2.1 的子集扩展到 CSS3 中与文档创作相关的一组成熟模块。
  • MathML 已经作为一级内容类型添加到 XHTML5 和 SVG 之中。
  • 拥有 CSS 窗口 (viewport) 的阅读系统现在必须支持内嵌字体。Web 开放字体格式现已添加为可接受的字体格式。
  • 显式支持非西欧手写模式和字体,包括日语和其他亚洲语言的竖行版式。
  • 可选择使用自定义安全模型,支持以 JavaScript 作为中介的互操作性。
  • 出版文档中允许使用的元数据已经得到扩展,包括对属性方面的资源描述框架 (RDFa) 的部分支持。
  • EPUB 2 Navigational Center eXtended (NCX) 目录 (TOC) 文档已经弃用,改为基于 XHTML5 的 TOC。(为了支持向后兼容性,仍然允许使用 NCX。)
 

验证 EPUB 3 文档

对于大多数内容类型而言,EPUB 3 依赖于 XML 序列化,因此支持自动验证。EpubCheck 工具是测试 EPUB 文档的有效性和一致性的规范方法。EpubCheck 是一种开源的(Berkeley Software 发放许可)Java™ 库。有一个开发人员预览版可以与 EPUB 3 一起使用,本文中使用的也是这个版本。请参阅 参考资料 部分,获得最新版本的链接。

强烈建议您为所有 EPUB 内容文档使用 .xhtml 扩展名。如果未使用该扩展名,浏览器无法将 HTML 内容解释为 application/xhtml+xml。在使用本文演示的 CSS 名称空间等众多特性时,必须使用 XML 处理模式。

典型情况下,您需要通过命令行与 EpubCheck 进行交互,如下所示。

$ java -jar epubcheck-3.0b3.jar sample.epub

Epubcheck Version 3.0b3

No errors or warnings detected.

如果您得到了 java.lang.NoClassDefFoundError: com/thaiopensource/validate/SchemaReader 错误响应,请确保 EpubCheck 发布版附带的库/目录与 EpubCheck JAR 文件处于同一个目录之中。

EpubCheck 3 可以单独验证 EPUB 包的一个子组件,如 清单 1 所示。本文示例中使用的这种极为有用的特性可以:

  • 帮助隔离问题。
  • 减少仅仅为了验证而将 EPUB 重新打包为新 ZIP 的繁琐工作。
  • 整合到单元测试框架之中,提供输出单独一种文件类型的工具链。
清单 1. 对单一文件类型运行 EpubCheck 3。
$ java -jar ~/src/epubcheck-3.0b3.jar sample-toc.xhtml -mode nav 
Epubcheck Version 3.0b3

WARNING: sample-toc.xhtml: File is validated as a single file of type nav and version 3! 
         Only a subset of the available tests is run!

No errors or warnings detected.
 

EPUB 3 文档的导航和层次结构

尽管 EPUB 2 中的 NCX TOC 文件支持许多层次导航和页面地图标记,但它派生自 Digital Accessible Information System (DAISY) Digital Talking Book(一种制作能够访问禁止打印内容的电子书)。依靠定义良好的 DAISY 格式,开发人员可以更加轻松地开发支持丰富可访问性的电子书阅读器。从这种意义上来讲,NCX 表现非常出色。然而,NCX DTD 较大,包含与 EPUB 2 不相关的特性。人们对 EPUB 必须使用 NCX 的哪些部分众说纷纭,因而造成某些电子书零售商和阅读系统供应商各自为政,提供了一些支离破碎的、专有的扩展。

EPUB 3 弃用了 NCX,使用 EPUB 导航文档 (END) 取而代之。清单 2 给出了一个示例。END 使用了 XHTML5,而非自定义 DTD,从而减少了需要实现和验证的 XML 格式数量。自定义 EPUB 属性使用 EPUB 名称空间提供 (http://www.idpf.org/2007/ops)。

清单 2. 最简单的 END

  
    Example
  
  
    

Contents

HTML5 

参考资料

学习

  • 使用 EPUB 制作电子书(Liza Daly,developerWorks,2011 年 7 月):详细了解 EPUB 格式。
  • EPUB 3 规范:获得 EPUB 标准最新修订版的概述。
  • EPUB Publications 3.0 建议规范:了解 EPUB® 3 的出版物级的语义和一致性需求,包括打包文档的格式,以及此文档和其他出版资源如何彼此关联,构成一致的 EPUB 出版物的规则。
  • EPUB 3 结构语义词汇表:进一步了解与编写作品的结构语义描述相关的属性。
  • 面向出版商的 HTML5(Sanders Kleinfeld,O'Reilly Media,2011 年):获得这本免费的 EPUB 图书,其中演示了如何使用基于画布的互操作性和 EPUB 3 中的其他有趣特性。
  • 响应式 Web 设计,作者是 Ethan Marcotte,探索了 CSS 技术和设计原则,包括流式网格、灵活的图像和媒体查询。
  • XML 新手入门 获得学习 XML 所需的资源。
  • developerWorks XML 专区:找到提升您的 XML 技能所需的资源,包括 DTD、架构和 XSLT。查阅 XML 技术库,获得广泛的技术文章和技巧、教程、标准和 IBM Redbook。
  • IBM XML 认证:了解如何成为 IBM 认证的 XML 和相关技术开发人员。
  • developerWorks 技术活动 和 网络广播:在这些活动中了解最新技术动向。
  • developerWorks 演示中心:观看这些演示,内容的范围从面向新手的产品安装和设置一直到面向经验丰富的开发人员的高级功能。
  • Twitter 中的 developerWorks:立即加入,关注 developerWorks 的微博。
  • developerWorks podcast:收听面向软件开发人员的有趣访谈和讨论。
  • 演示如何用 WebSphere Studio 快速开发Web Services:观看这些演示,内容的范围从面向新手的产品安装和设置演示一直到面向经验丰富的开发人员的高级功能。

获得产品和技术

  • EpubCheck:下载最新版本的验证工具,此工具可以与 EPUB 2 和 EPUB 3 文档一起使用。
  • nend:获得完整的 XSLT 和 Python 工具套件,以便将 NCX 文件转为 END。
  • STIX 字体:使用为科学和工程社区提供服务的完整字体集。
  • IBM 产品评估试用版软件:下载或 IBM SOA 人员沙箱,开始使用来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。

讨论

  • developerWorks 个人资料:立即创建您的个人资料,并 设置一个关注列表。
  • XML 专区论坛:参与任何 XML 相关的讨论。
  • developerWorks 中文社区:与其他 developerWorks 用户联系,浏览开发人员推动的博客、论坛、小组和 wiki。

你可能感兴趣的:(使用 HTML5、CSS3 和 MathML 在 EPUB 3 中制作版式丰富的出版物)