APP下载

一种支持EPUB3.0标准的电子书阅读软件

2014-12-13王冬青

关键词:电子书文档解析

胡 畔,王冬青

(华南师范大学教育信息技术学院,广州510631)

随着云计算与移动通讯技术的不断发展,以及平板电脑、智能手机、电子书阅读器等便携式终端的普及,基于数字内容云服务的移动阅读已成为许多人的日常行为之一. 与此同时,数字出版市场呈现出快速增长和扩大的态势,已经成为移动互联网领域的重要内容. 电子书是数字出版内容服务的重要组成部分,它是指以数字形式制作、出版、存取和使用的出版物,通常需借助一定的阅读软件和电子设备进行读取. 电子书的生产与应用涉及到格式标准、制作工具、阅读软件等一系列问题. 不同企业出于保护自身商业利益与内容资源等因素的考虑,各自支持的格式标准之间难以统一和兼容,导致内容资源和阅读系统重复开发问题严重,已成为制约电子书产业发展的瓶颈之一.

1 EPUB3.0 标准及阅读软件

1.1 EPUB3.0 标准特性

EPUB 是国际数字出版论坛IDPF(International Digital Publishing Forum)制定的开放电子书国际标准,自发布以来获得了众多终端厂商、平台开发商及主流出版商的支持与认可,已逐渐成为开放电子书格式的主流标准[1]. IDPF 先后发布了多个EPUB版本,其中,EPUB2.0 得到了以E-Ink 技术为基础的专用电子书阅读器的普遍支持. 专用电子书阅读器的主要优势是低功耗和视力保护,但同时存在不能支持动态媒体格式、翻页速度慢、交互性不强等缺陷[2],EPUB2.0 也存在相应的不足.

随着平板电脑与智能手机的快速发展,其良好的动态富媒体支持及自然人机交互体验对专用电子书阅读器产生了很大冲击. 面对终端设备和Web技术的最新发展趋势,IDPF 于2011年10月发布了EPUB3.0 标准. EPUB3.0 是对原有EPUB2.0.1 版本的提升,基于HTML5、CSS3 及JavaScript 等Web技术,能够支持丰富的数字化媒体、多样的内容布局、深度用户交互以及动态驱动和响应. EPUB3.0的典型功能特性如下[3-4]:

1.1.1 丰富的媒体类型 EPUB3.0 支持HTML5中audio 和video 元素的所有功能和特性,可以为电子书提供音、视频播放服务. 此外,EPUB3.0 支持同步多媒体集成语言SMIL(Synchronous Multimedia Integrate Language),能够实现文本显示状态与语音播放同步. EPUB3.0 还支持可缩放矢量图形SVG(Scalable Vector Graphics)及数学标记语言MathML等基于XML 的标准.

1.1.2 强交互性 EPUB3.0 支持在HTML5 和SVG中应用JavaScript 脚本语言,并能够结合CSS3 实现丰富的动画效果与交互功能. 实质上,可以将EPUB3.0电子书看作是一个Web 应用程序.

1.1.3 关联性 EPUB3.0 在元数据中引入了新的元素link,用于描述和关联与出版物相关的资源.此外,EPUB3.0 制定了一套片段标识符规范CFI(Canonical Fragment Identifier),定义了使用CFI 链接出版物任意内容的方式,使内容获取变得更加精细化.

1.1.4 丰富的语义表达 EPUB3.0 支持HTML5提供的一些新元素如section、nav、aside 等,使标记语言更加语义化. 此外,EPUB3.0 增加了epub:type等属性用来变换所属元素的语义,使电子书能够更好地组织及定义文档内容,展现文档结构,提供便利的导航等.

1.2 EPUB3.0 电子书阅读软件现状

目前,大多数阅读软件都难以全面支持EPUB3.0 的功能特性. 为了推进EPUB3.0 标准的实际应用与产业化,IDPF 及其支持者合作开发了开源阅读软件Readium[5]. 此外,Infogrid Pacific 与AEL Data 分别推出的跨平台阅读软件AZARDI 和Lektz eBook Reader 都能够较全面地支持EPUB3.0;香港应用科技研究院开发的电子书阅读软件ASTRI-Bee 不仅能够较好地支持EPUB3.0,还支持在线词典、笔记标注等学习辅助功能. 其他较为典型的EPUB3.0 阅读软件还包括Bluefire Productions 公司开发的Bluefire Reader,韩国Gitden 公司开发的Gitden Book Reader,Apps4Android 公司开发的IDEAL Group Reader 等.

美国图书行业协会(BISG)2013年3月发布的最新调查报告“EPUB3 Support Grid”详细分析了各主要厂商的产品(包括阅读软件、硬件终端及基于浏览器的在线阅读平台)对EPUB3.0 的支持情况[6]. 表1列举了该报告中部分较为典型的EPUB3.0 阅读软件及本研究所开发的EPUB3.0 Reader,分析对比了各阅读软件对EPUB3.0 主要功能特性和不同系统平台的支持情况.

表1 主要EPUB3.0 阅读软件功能特性支持Table 1 The features of main EPUB3.0-supported reading softwares

2 电子书阅读软件的设计

2.1 阅读软件的系统架构

电子书阅读系统包括布署在云端的数字内容服务平台、阅读软件及终端设备等,构成了“云服务+终端”的数字内容服务模式. 图1 为基于Android 平台的EPUB3.0 电子书阅读系统结构框图,该系统是一个包含电子书上传、管理、下载和解析等功能的综合应用平台,数字内容服务平台的主要功能包括电子书存储和管理等,EPUB3.0 Reader 的主要功能包括电子书内容解析、渲染及浏览等.

图1 电子书阅读系统结构框图Figure 1 Structure block diagram of e-book reading system

针对当前差异化的硬件设备和软件平台,阅读软件EPUB3. 0 Reader 的开发采用基于浏览器的Web 应用程序,既降低了开发成本,也有利于提高阅读软件多终端跨平台的互操作性能. EPUB3.0 Reader 主要通过浏览器对电子书内容文档进行解析渲染,也可以直接调用Android 系统的相应接口实现对底层硬件的访问和控制.

2.2 EPUB3.0 Reader 功能设计

EPUB3.0 Reader 的功能定位首先是对EPUB3.0标准提供尽可能全面的支持;其次是具备相应的阅读辅助功能,以及良好的用户界面与阅读体验等.

阅读软件要实现对EPUB3.0 标准的支持应具备如下功能. 首先,能够解析并验证EPUB3.0 文档格式的规范性,具备针对格式不规范文档的完善处理机制;其次,能利用浏览器引擎对EPUB3.0 封装包的内容文档进行渲染和呈现,包括对内容文档中EPUB3.0 新增元素与语义转换属性的支持;第三,支持SMIL、CFI 及MathML 等功能特性.

为提升用户的阅读与操控体验,软件还要具备相应的阅读辅助功能. 第一,能够对字体大小、屏幕亮度等阅读环境变量进行设置;第二,提供便捷的导航服务,通过目录、标注及书签等3 种方式定位并跳转至链接内容;第三,可以对选定文本进行复制、笔记标注、高亮标记、分享、搜索和设置书签等操作.

3 软件的实现方法与核心算法

3.1 EPUB3.0 文档的解析与处理

阅读软件主要基于JavaScript 语言及jQuery 框架开发,通过浏览器引擎对电子书内容文档进行解析与渲染. EPUB3.0 文档的解析与处理是实现阅读软件的关键,以下对其实现过程进行详细讨论.

EPUB3.0 格式文档以ZIP 压缩格式储存,扩展名为epub,其文档物理结构如图2 所示. mimetype文档是压缩包的第一个文档,用于标识文档类型和封装格式. container. xml 为META-INF 目录下的必要文档,主要用于指定OPF 文档的路径. META-INF目录下还可以包含与数字签名、文档加密等功能相关的文档. OPF 文档即开放封装格式文档,它是EPUB 电子书资源组织与内容处理的核心,通常与其他内容资源统一存放于一个非通用名称的文档目录中,图2 中该文档目录名称为Content.

图2 EPUB3.0 电子书文档结构Figure 2 Structure diagram of EPUB3.0 documents

阅读软件解析并处理EPUB3.0 文档的基本流程如算法1 所示.

算法1

Setp1:解析mimetype 文档以验证电子书文档的MIME 类型,该文档包含的文本内容须为“application/epub+zip”.

Setp2:解析META-INF 文件夹下的container.xml文档,获取rootfile 标签的full-path 属性,该属性值指向OPF 文档的存储路径.

Setp3:解析OPF 文档,获取书籍元数据、内容资源清单、阅读顺序、内容替代兼容方案等数据信息并进行相应处理. 详细讨论见3.2.1.

Setp4:利用从OPF 文档中获取的数据信息,解析并处理各个内容文档并在阅读器视窗中予以呈现. 内容文档的解析和渲染是EPUB3.0 文档解析的核心,详细解析流程见3.2.2.

Setp5:结束.

3.2 核心算法

3.2.1 OPF 文档的解析 OPF 文档包含了书籍结构性数据及内容处理方式等信息,是一个标准的XML 文档. 文档由根元素package 中包含的metadata、manifest、spine、bindings 等子元素组成. 其中,metadata 元素中包含了电子书的元数据信息;manifest 元素列出了EPUB 文档中所有的内容资源;spine 元素主要定义了电子书的阅读顺序;bindings元素实现了EPUB3.0 不支持的媒体类型与其对应的处理器脚本之间的关联.

对OPF 文档的解析具体流程如算法2 所示.

算法2

Setp1:解析package 根元素,验证文档版本及元数据命名空间等信息.

Setp2:解析metadata 元素,获取书籍元数据信息,包括书名、作者、标识符、语言等.

Setp3:解析manifest 元素,获取每项item 的属性,并进行相应处理. 首先,通过href 属性验证内容资源文档是否存在;其次,通过media-overlay 属性将该资源文档与对应多媒体同步文档之间建立映射,并对SMIL 文档进行解析与预处理.

Setp4:解析spine 元素,通过idref 属性值建立itemref 标签与代表内容资源的item 标签之间的关联与映射.

Setp5:解析bindings 元素,获取每一个mediaType 标签中handler 属性与media-type 属性的值,建立媒体类型与对应处理脚本之间的关联映射.

Setp6:结束.

3.2.2 内容文档的处理解析 EPUB3.0 电子书的内容文档类型包括xhtml 文档、导览文档和SVG 文档等. 除xhtml 文档以外,其他类型文档的处理均比较简单,阅读软件对xhtml 文档的解析流程如图3 所示.

图3 xhtml 文档解析流程Figure 3 Parsing process of the xhtml documents

阅读软件在提取内容文档数据并加载至页面框架后,如果判断该文档为xhmtl 类型,则进行如下处理.

首先,加载MathJax 数学公式库. MathJax 是一个开源并基于Ajax 的数学公式显示解决方案,可以将MathML 渲染生成为Web 页面中的数学符号和公式.当阅读软件检测到xhtml 文档中包含MathML 时,将在文档head 元素中加入MathJax 库的引用链接,即可由MathJax 实现对MathML 的自动渲染与处理.

其次,处理bindings 元素. 当阅读系统检测到xhtml 文档中存在无法支持的媒体对象时,将查找bindings 元素中的每一个mediaType 标签项,确定是否定义了该媒体类型的处理器,并利用handler 属性关联至相应处理脚本文档进行处理操作.

最后,阅读系统对epub:switch 元素、epub:trigger 元素和epub:type 属性的处理方式基本一致,即依据EPUB3.0 的规范与释义,查找xhtml 文档中以上各个标签,并替换为浏览器引擎能够识别和渲染的脚本片段. epub:switch 元素可根据阅读系统所具备功能条件的不同而调整呈现的内容,以增强电子书与不同阅读软件的兼容性;epub:trigger 元素可以将某一对象事件与媒体对象的播放动作进行关联;epub:type 属性可变换所属标签的语义信息,语义信息包括书籍章节、术语表、注释和引用等.

3.2.3 标准片段标识符规范原理分析 标准片段标识符规范EPUBCFI(EPUB Canonical Fragment Identifier)提供了一种通用可跨平台互操作的文档片段标识标准. 阅读系统利用EPUBCFI 能够对xhmtl文档中任意对象精确标识,包括文本、图像、音频及视频,并且可以精确标识到图像(或视频画面)中的坐标位置以及音频(或视频)播放的时间点. 在电子书中应用这一技术可以便捷地实现书签、标注和笔记等内容的标识定位,并可将注释内容导出和分享.

以下以一个文档实例详细说明CFI 的算法[7].

图4 示例文档“cfitest.xhtml”Figure 4 An example of xhtml document

图4 所示的示例文档中,p 元素中文本‘a’的EPUBCFI 标识符如例1 所示.

例1 cfitest.xhtml#epubcfi(/2/4[ebook]/4/1:12)

例1 中,‘#’前面为内容片段所在的文档名称“cfitest.xhtml”,“epubcfi()”括号内为寻址路径. 寻址路径以‘/’为分隔符,‘/’后面的数字表示节点序号,节点序号后方括号内为该节点id. 最后部分为具体位置信息.

EPUBCFI 规范将节点分为文本节点与DOM 节点两类,其中文本节点是指出现在第1个DOM 节点之前,最后1个DOM 节点之后以及2个DOM 节点之间的文本内容. 2 种类型的节点计数形式不同,文本节点类型从1 开始以奇数计数(如:1,3,5,…),DOM 节点类型从2 开始以偶数计数(如:2,4,6,…),其他类型的节点不计算在内.

最后部分为标识对象的具体位置,根据对象类型不同所采用的分隔符及表示方式也不相同. 其中,文本对象以‘:’分隔,后跟从0 开始计数的数字表示文本位置;图像对象以‘@’分隔,后跟逗号分隔的坐标位置,如“@67.27,44.33”,图像左上角坐标为(0,0),右下角坐标为(100,100);音频对象以‘~’分隔,后跟当时音频播放的时间点,如“~23.3”,单位为秒;视频对象则结合时间和空间标识,例如“~21.25@30.24,15.12”,即表示该视频第21.25 秒画面的(30.24,15.12)坐标处.

例1 所示标识符“epubcfi()”括号内从左至右各个数字表示的含义如下:

‘2’:第1个DOM 节点<html >;

‘4’:<html >节点下的第2个DOM 节点<body id=ebook >;

‘4’:<body id=ebook >节点下的第2个DOM节点<p >;

‘1’:<p >节点下的第1个文本节点,其内容为:“节点p 下的第1个文本节点a”;

‘12’:文本节点中第13个字符‘a’.

4 结论与展望

本研究提出了一个基于浏览器引擎的EPUB3.0电子书阅读系统设计方案,详细阐述了电子书的解析与处理流程,并对xhmtl 文档的解析及EPUBCFI的实现等问题进行了深入分析与探讨. 所实现的阅读系统能够支持EPUB3.0 的基本特性与功能,具备良好的UI 界面和交互功能.

后续研究工作将进一步完善阅读软件的功能,包括支持更全面的EPUB3.0 语义属性,提升对不规范格式文档的兼容性等;其次,在阅读软件中增加阅读过程追踪模块,记录用户阅读时间、交互操作等数据,并分析用户阅读行为与偏好,对阅读软件功能进行改进与调整.

[1]付跃安,黄晓斌.EPUB 标准及其在我国数字图书馆建设中的应用[J].图书馆论坛,2012,32(3):75-79.Fu Y An,Huang X B.EPUB standard and its application to digital libraries in China[J]. Library Tribune,2012,32(3):75-79.

[2]Liao W H,Chueh Chienpao.Analysis and interpretation of e-Reader user logs[C]∥IEEE international conference on advanced learning technologies. Georgia,USA,2011:123-125.

[3]IDPF.EPUB3 Overview[EB/OL]. (2011- 10- 11)[2013-02-25].http:∥idpf.org/epub/30.

[4]叶兰.电子图书新规范EPUB3.0 及其应用[J].图书馆杂志,2012,31(8):53-59.Ye L.An analysis of EPUB3.0 specification and its application[J].Library Journal,2012,31(8):53-59.

[5]IDPF. The readium Dev Blog[EB/OL]. (2012-03-14)[2013-4-25].http:∥readium.github.io.

[6]BISG. EPUB3 support grid[EB/OL]. (2013-03-07)[2013-04-28].http:∥www.bisg.org/what-we-do-12-152-epub-30-support-grid.php.

[7]IDPF.EPUBCFI[EB/OL].(2011-10-11)[2013-02-25].http:∥idpf.org/epub/linking/cfi/epub-cfi.html.

猜你喜欢

电子书文档解析
浅谈Matlab与Word文档的应用接口
有人一声不吭向你扔了个文档
三角函数解析式中ω的几种求法
睡梦解析仪
电竞初解析
打造自己的电子书架
对称巧用解析妙解
基于RI码计算的Word复制文档鉴别
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
基于电子书包的学习分析探究