胡 畔,王冬青
(華南師范大學(xué)教育信息技術(shù)學(xué)院,廣州510631)
隨著云計算與移動通訊技術(shù)的不斷發(fā)展,以及平板電腦、智能手機、電子書閱讀器等便攜式終端的普及,基于數(shù)字內(nèi)容云服務(wù)的移動閱讀已成為許多人的日常行為之一. 與此同時,數(shù)字出版市場呈現(xiàn)出快速增長和擴大的態(tài)勢,已經(jīng)成為移動互聯(lián)網(wǎng)領(lǐng)域的重要內(nèi)容. 電子書是數(shù)字出版內(nèi)容服務(wù)的重要組成部分,它是指以數(shù)字形式制作、出版、存取和使用的出版物,通常需借助一定的閱讀軟件和電子設(shè)備進行讀取. 電子書的生產(chǎn)與應(yīng)用涉及到格式標準、制作工具、閱讀軟件等一系列問題. 不同企業(yè)出于保護自身商業(yè)利益與內(nèi)容資源等因素的考慮,各自支持的格式標準之間難以統(tǒng)一和兼容,導(dǎo)致內(nèi)容資源和閱讀系統(tǒng)重復(fù)開發(fā)問題嚴重,已成為制約電子書產(chǎn)業(yè)發(fā)展的瓶頸之一.
EPUB 是國際數(shù)字出版論壇IDPF(International Digital Publishing Forum)制定的開放電子書國際標準,自發(fā)布以來獲得了眾多終端廠商、平臺開發(fā)商及主流出版商的支持與認可,已逐漸成為開放電子書格式的主流標準[1]. IDPF 先后發(fā)布了多個EPUB版本,其中,EPUB2.0 得到了以E-Ink 技術(shù)為基礎(chǔ)的專用電子書閱讀器的普遍支持. 專用電子書閱讀器的主要優(yōu)勢是低功耗和視力保護,但同時存在不能支持動態(tài)媒體格式、翻頁速度慢、交互性不強等缺陷[2],EPUB2.0 也存在相應(yīng)的不足.
隨著平板電腦與智能手機的快速發(fā)展,其良好的動態(tài)富媒體支持及自然人機交互體驗對專用電子書閱讀器產(chǎn)生了很大沖擊. 面對終端設(shè)備和Web技術(shù)的最新發(fā)展趨勢,IDPF 于2011年10月發(fā)布了EPUB3.0 標準. EPUB3.0 是對原有EPUB2.0.1 版本的提升,基于HTML5、CSS3 及JavaScript 等Web技術(shù),能夠支持豐富的數(shù)字化媒體、多樣的內(nèi)容布局、深度用戶交互以及動態(tài)驅(qū)動和響應(yīng). EPUB3.0的典型功能特性如下[3-4]:
1.1.1 豐富的媒體類型 EPUB3.0 支持HTML5中audio 和video 元素的所有功能和特性,可以為電子書提供音、視頻播放服務(wù). 此外,EPUB3.0 支持同步多媒體集成語言SMIL(Synchronous Multimedia Integrate Language),能夠?qū)崿F(xiàn)文本顯示狀態(tài)與語音播放同步. EPUB3.0 還支持可縮放矢量圖形SVG(Scalable Vector Graphics)及數(shù)學(xué)標記語言MathML等基于XML 的標準.
1.1.2 強交互性 EPUB3.0 支持在HTML5 和SVG中應(yīng)用JavaScript 腳本語言,并能夠結(jié)合CSS3 實現(xiàn)豐富的動畫效果與交互功能. 實質(zhì)上,可以將EPUB3.0電子書看作是一個Web 應(yīng)用程序.
1.1.3 關(guān)聯(lián)性 EPUB3.0 在元數(shù)據(jù)中引入了新的元素link,用于描述和關(guān)聯(lián)與出版物相關(guān)的資源.此外,EPUB3.0 制定了一套片段標識符規(guī)范CFI(Canonical Fragment Identifier),定義了使用CFI 鏈接出版物任意內(nèi)容的方式,使內(nèi)容獲取變得更加精細化.
1.1.4 豐富的語義表達 EPUB3.0 支持HTML5提供的一些新元素如section、nav、aside 等,使標記語言更加語義化. 此外,EPUB3.0 增加了epub:type等屬性用來變換所屬元素的語義,使電子書能夠更好地組織及定義文檔內(nèi)容,展現(xiàn)文檔結(jié)構(gòu),提供便利的導(dǎo)航等.
目前,大多數(shù)閱讀軟件都難以全面支持EPUB3.0 的功能特性. 為了推進EPUB3.0 標準的實際應(yīng)用與產(chǎn)業(yè)化,IDPF 及其支持者合作開發(fā)了開源閱讀軟件Readium[5]. 此外,Infogrid Pacific 與AEL Data 分別推出的跨平臺閱讀軟件AZARDI 和Lektz eBook Reader 都能夠較全面地支持EPUB3.0;香港應(yīng)用科技研究院開發(fā)的電子書閱讀軟件ASTRI-Bee 不僅能夠較好地支持EPUB3.0,還支持在線詞典、筆記標注等學(xué)習(xí)輔助功能. 其他較為典型的EPUB3.0 閱讀軟件還包括Bluefire Productions 公司開發(fā)的Bluefire Reader,韓國Gitden 公司開發(fā)的Gitden Book Reader,Apps4Android 公司開發(fā)的IDEAL Group Reader 等.
美國圖書行業(yè)協(xié)會(BISG)2013年3月發(fā)布的最新調(diào)查報告“EPUB3 Support Grid”詳細分析了各主要廠商的產(chǎn)品(包括閱讀軟件、硬件終端及基于瀏覽器的在線閱讀平臺)對EPUB3.0 的支持情況[6]. 表1列舉了該報告中部分較為典型的EPUB3.0 閱讀軟件及本研究所開發(fā)的EPUB3.0 Reader,分析對比了各閱讀軟件對EPUB3.0 主要功能特性和不同系統(tǒng)平臺的支持情況.
表1 主要EPUB3.0 閱讀軟件功能特性支持Table 1 The features of main EPUB3.0-supported reading softwares
電子書閱讀系統(tǒng)包括布署在云端的數(shù)字內(nèi)容服務(wù)平臺、閱讀軟件及終端設(shè)備等,構(gòu)成了“云服務(wù)+終端”的數(shù)字內(nèi)容服務(wù)模式. 圖1 為基于Android 平臺的EPUB3.0 電子書閱讀系統(tǒng)結(jié)構(gòu)框圖,該系統(tǒng)是一個包含電子書上傳、管理、下載和解析等功能的綜合應(yīng)用平臺,數(shù)字內(nèi)容服務(wù)平臺的主要功能包括電子書存儲和管理等,EPUB3.0 Reader 的主要功能包括電子書內(nèi)容解析、渲染及瀏覽等.
圖1 電子書閱讀系統(tǒng)結(jié)構(gòu)框圖Figure 1 Structure block diagram of e-book reading system
針對當前差異化的硬件設(shè)備和軟件平臺,閱讀軟件EPUB3. 0 Reader 的開發(fā)采用基于瀏覽器的Web 應(yīng)用程序,既降低了開發(fā)成本,也有利于提高閱讀軟件多終端跨平臺的互操作性能. EPUB3.0 Reader 主要通過瀏覽器對電子書內(nèi)容文檔進行解析渲染,也可以直接調(diào)用Android 系統(tǒng)的相應(yīng)接口實現(xiàn)對底層硬件的訪問和控制.
EPUB3.0 Reader 的功能定位首先是對EPUB3.0標準提供盡可能全面的支持;其次是具備相應(yīng)的閱讀輔助功能,以及良好的用戶界面與閱讀體驗等.
閱讀軟件要實現(xiàn)對EPUB3.0 標準的支持應(yīng)具備如下功能. 首先,能夠解析并驗證EPUB3.0 文檔格式的規(guī)范性,具備針對格式不規(guī)范文檔的完善處理機制;其次,能利用瀏覽器引擎對EPUB3.0 封裝包的內(nèi)容文檔進行渲染和呈現(xiàn),包括對內(nèi)容文檔中EPUB3.0 新增元素與語義轉(zhuǎn)換屬性的支持;第三,支持SMIL、CFI 及MathML 等功能特性.
為提升用戶的閱讀與操控體驗,軟件還要具備相應(yīng)的閱讀輔助功能. 第一,能夠?qū)ψ煮w大小、屏幕亮度等閱讀環(huán)境變量進行設(shè)置;第二,提供便捷的導(dǎo)航服務(wù),通過目錄、標注及書簽等3 種方式定位并跳轉(zhuǎn)至鏈接內(nèi)容;第三,可以對選定文本進行復(fù)制、筆記標注、高亮標記、分享、搜索和設(shè)置書簽等操作.
閱讀軟件主要基于JavaScript 語言及jQuery 框架開發(fā),通過瀏覽器引擎對電子書內(nèi)容文檔進行解析與渲染. EPUB3.0 文檔的解析與處理是實現(xiàn)閱讀軟件的關(guān)鍵,以下對其實現(xiàn)過程進行詳細討論.
EPUB3.0 格式文檔以ZIP 壓縮格式儲存,擴展名為epub,其文檔物理結(jié)構(gòu)如圖2 所示. mimetype文檔是壓縮包的第一個文檔,用于標識文檔類型和封裝格式. container. xml 為META-INF 目錄下的必要文檔,主要用于指定OPF 文檔的路徑. META-INF目錄下還可以包含與數(shù)字簽名、文檔加密等功能相關(guān)的文檔. OPF 文檔即開放封裝格式文檔,它是EPUB 電子書資源組織與內(nèi)容處理的核心,通常與其他內(nèi)容資源統(tǒng)一存放于一個非通用名稱的文檔目錄中,圖2 中該文檔目錄名稱為Content.
圖2 EPUB3.0 電子書文檔結(jié)構(gòu)Figure 2 Structure diagram of EPUB3.0 documents
閱讀軟件解析并處理EPUB3.0 文檔的基本流程如算法1 所示.
算法1
Setp1:解析mimetype 文檔以驗證電子書文檔的MIME 類型,該文檔包含的文本內(nèi)容須為“application/epub+zip”.
Setp2:解析META-INF 文件夾下的container.xml文檔,獲取rootfile 標簽的full-path 屬性,該屬性值指向OPF 文檔的存儲路徑.
Setp3:解析OPF 文檔,獲取書籍元數(shù)據(jù)、內(nèi)容資源清單、閱讀順序、內(nèi)容替代兼容方案等數(shù)據(jù)信息并進行相應(yīng)處理. 詳細討論見3.2.1.
Setp4:利用從OPF 文檔中獲取的數(shù)據(jù)信息,解析并處理各個內(nèi)容文檔并在閱讀器視窗中予以呈現(xiàn). 內(nèi)容文檔的解析和渲染是EPUB3.0 文檔解析的核心,詳細解析流程見3.2.2.
Setp5:結(jié)束.
3.2.1 OPF 文檔的解析 OPF 文檔包含了書籍結(jié)構(gòu)性數(shù)據(jù)及內(nèi)容處理方式等信息,是一個標準的XML 文檔. 文檔由根元素package 中包含的metadata、manifest、spine、bindings 等子元素組成. 其中,metadata 元素中包含了電子書的元數(shù)據(jù)信息;manifest 元素列出了EPUB 文檔中所有的內(nèi)容資源;spine 元素主要定義了電子書的閱讀順序;bindings元素實現(xiàn)了EPUB3.0 不支持的媒體類型與其對應(yīng)的處理器腳本之間的關(guān)聯(lián).
對OPF 文檔的解析具體流程如算法2 所示.
算法2
Setp1:解析package 根元素,驗證文檔版本及元數(shù)據(jù)命名空間等信息.
Setp2:解析metadata 元素,獲取書籍元數(shù)據(jù)信息,包括書名、作者、標識符、語言等.
Setp3:解析manifest 元素,獲取每項item 的屬性,并進行相應(yīng)處理. 首先,通過href 屬性驗證內(nèi)容資源文檔是否存在;其次,通過media-overlay 屬性將該資源文檔與對應(yīng)多媒體同步文檔之間建立映射,并對SMIL 文檔進行解析與預(yù)處理.
Setp4:解析spine 元素,通過idref 屬性值建立itemref 標簽與代表內(nèi)容資源的item 標簽之間的關(guān)聯(lián)與映射.
Setp5:解析bindings 元素,獲取每一個mediaType 標簽中handler 屬性與media-type 屬性的值,建立媒體類型與對應(yīng)處理腳本之間的關(guān)聯(lián)映射.
Setp6:結(jié)束.
3.2.2 內(nèi)容文檔的處理解析 EPUB3.0 電子書的內(nèi)容文檔類型包括xhtml 文檔、導(dǎo)覽文檔和SVG 文檔等. 除xhtml 文檔以外,其他類型文檔的處理均比較簡單,閱讀軟件對xhtml 文檔的解析流程如圖3 所示.
圖3 xhtml 文檔解析流程Figure 3 Parsing process of the xhtml documents
閱讀軟件在提取內(nèi)容文檔數(shù)據(jù)并加載至頁面框架后,如果判斷該文檔為xhmtl 類型,則進行如下處理.
首先,加載MathJax 數(shù)學(xué)公式庫. MathJax 是一個開源并基于Ajax 的數(shù)學(xué)公式顯示解決方案,可以將MathML 渲染生成為Web 頁面中的數(shù)學(xué)符號和公式.當閱讀軟件檢測到xhtml 文檔中包含MathML 時,將在文檔head 元素中加入MathJax 庫的引用鏈接,即可由MathJax 實現(xiàn)對MathML 的自動渲染與處理.
其次,處理bindings 元素. 當閱讀系統(tǒng)檢測到xhtml 文檔中存在無法支持的媒體對象時,將查找bindings 元素中的每一個mediaType 標簽項,確定是否定義了該媒體類型的處理器,并利用handler 屬性關(guān)聯(lián)至相應(yīng)處理腳本文檔進行處理操作.
最后,閱讀系統(tǒng)對epub:switch 元素、epub:trigger 元素和epub:type 屬性的處理方式基本一致,即依據(jù)EPUB3.0 的規(guī)范與釋義,查找xhtml 文檔中以上各個標簽,并替換為瀏覽器引擎能夠識別和渲染的腳本片段. epub:switch 元素可根據(jù)閱讀系統(tǒng)所具備功能條件的不同而調(diào)整呈現(xiàn)的內(nèi)容,以增強電子書與不同閱讀軟件的兼容性;epub:trigger 元素可以將某一對象事件與媒體對象的播放動作進行關(guān)聯(lián);epub:type 屬性可變換所屬標簽的語義信息,語義信息包括書籍章節(jié)、術(shù)語表、注釋和引用等.
3.2.3 標準片段標識符規(guī)范原理分析 標準片段標識符規(guī)范EPUBCFI(EPUB Canonical Fragment Identifier)提供了一種通用可跨平臺互操作的文檔片段標識標準. 閱讀系統(tǒng)利用EPUBCFI 能夠?qū)hmtl文檔中任意對象精確標識,包括文本、圖像、音頻及視頻,并且可以精確標識到圖像(或視頻畫面)中的坐標位置以及音頻(或視頻)播放的時間點. 在電子書中應(yīng)用這一技術(shù)可以便捷地實現(xiàn)書簽、標注和筆記等內(nèi)容的標識定位,并可將注釋內(nèi)容導(dǎo)出和分享.
以下以一個文檔實例詳細說明CFI 的算法[7].
圖4 示例文檔“cfitest.xhtml”Figure 4 An example of xhtml document
圖4 所示的示例文檔中,p 元素中文本‘a(chǎn)’的EPUBCFI 標識符如例1 所示.
例1 cfitest.xhtml#epubcfi(/2/4[ebook]/4/1:12)
例1 中,‘#’前面為內(nèi)容片段所在的文檔名稱“cfitest.xhtml”,“epubcfi()”括號內(nèi)為尋址路徑. 尋址路徑以‘/’為分隔符,‘/’后面的數(shù)字表示節(jié)點序號,節(jié)點序號后方括號內(nèi)為該節(jié)點id. 最后部分為具體位置信息.
EPUBCFI 規(guī)范將節(jié)點分為文本節(jié)點與DOM 節(jié)點兩類,其中文本節(jié)點是指出現(xiàn)在第1個DOM 節(jié)點之前,最后1個DOM 節(jié)點之后以及2個DOM 節(jié)點之間的文本內(nèi)容. 2 種類型的節(jié)點計數(shù)形式不同,文本節(jié)點類型從1 開始以奇數(shù)計數(shù)(如:1,3,5,…),DOM 節(jié)點類型從2 開始以偶數(shù)計數(shù)(如:2,4,6,…),其他類型的節(jié)點不計算在內(nèi).
最后部分為標識對象的具體位置,根據(jù)對象類型不同所采用的分隔符及表示方式也不相同. 其中,文本對象以‘:’分隔,后跟從0 開始計數(shù)的數(shù)字表示文本位置;圖像對象以‘@’分隔,后跟逗號分隔的坐標位置,如“@67.27,44.33”,圖像左上角坐標為(0,0),右下角坐標為(100,100);音頻對象以‘~’分隔,后跟當時音頻播放的時間點,如“~23.3”,單位為秒;視頻對象則結(jié)合時間和空間標識,例如“~21.25@30.24,15.12”,即表示該視頻第21.25 秒畫面的(30.24,15.12)坐標處.
例1 所示標識符“epubcfi()”括號內(nèi)從左至右各個數(shù)字表示的含義如下:
‘2’:第1個DOM 節(jié)點<html >;
‘4’:<html >節(jié)點下的第2個DOM 節(jié)點<body id=ebook >;
‘4’:<body id=ebook >節(jié)點下的第2個DOM節(jié)點<p >;
‘1’:<p >節(jié)點下的第1個文本節(jié)點,其內(nèi)容為:“節(jié)點p 下的第1個文本節(jié)點a”;
‘12’:文本節(jié)點中第13個字符‘a(chǎn)’.
本研究提出了一個基于瀏覽器引擎的EPUB3.0電子書閱讀系統(tǒng)設(shè)計方案,詳細闡述了電子書的解析與處理流程,并對xhmtl 文檔的解析及EPUBCFI的實現(xiàn)等問題進行了深入分析與探討. 所實現(xiàn)的閱讀系統(tǒng)能夠支持EPUB3.0 的基本特性與功能,具備良好的UI 界面和交互功能.
后續(xù)研究工作將進一步完善閱讀軟件的功能,包括支持更全面的EPUB3.0 語義屬性,提升對不規(guī)范格式文檔的兼容性等;其次,在閱讀軟件中增加閱讀過程追蹤模塊,記錄用戶閱讀時間、交互操作等數(shù)據(jù),并分析用戶閱讀行為與偏好,對閱讀軟件功能進行改進與調(diào)整.
[1]付躍安,黃曉斌.EPUB 標準及其在我國數(shù)字圖書館建設(shè)中的應(yīng)用[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]葉蘭.電子圖書新規(guī)范EPUB3.0 及其應(yīng)用[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.