基于XML的电子书自排版系统的实现
2017-08-09殷克涛张煊
殷克涛 张煊
[摘 要] 当前,大多数电子书制作商、加工商专注于扩充电子书库的容量,忽略了电子书排版的质量,造成其制作、加工的电子书普遍存在阅读体验差、阅读效果不理想的问题。面对差异化的用户需求,如何在电子书自动排版基础上实现专业的排版效果是当前面临的重要问题。本文在XML基础上构建电子书E-book,并利用专业设计的参数文档结合XSL转化实现电子书自排版,基本达到了专业排版的效果。
[关键词] 电子书 自排版 可扩展标记语言
[中图分类号] G238 [文献标识码] A [文章编号] 1009-5853 (2017) 04-0040-05
Realization of the E-Book Self-Publishing System Based on XML
Yin ketao Zhang xuan
(School of Humanities, Zhejiang Gongshang University, Hangzhou, 310018)(School of Information Management, Central China Normal University, Wuhan, 430072)
[Abstract] At present, most of the book publishers focus on the expansion of their e-books library capacity, ignoring the quality of e-book typesetting, which results poor reading experience and effects. Facing the difference of user's demand, how to realize an e-book publishing system which have professional typesetting effects is the most important question that we have to deal with. In this paper, the e-book self-publishing system is built based on the XML. The system can realize the the effect of professional typesetting by using the professional design of the e-book typesetting parameters and XSL conversion.
[Key words] E-book Self-typesetting XML
1 引 言
在亚马逊Kindle开启电子书热潮后,一些国内出版企业以及电商巨头也在积极开展电子书业务。与此同时,移动阅读、社交媒体也在加速推动电子书的传播与影响,强化人们的读书兴趣。“电子书热”增强了电子书内容提供商和加工商对于电子书市场良好的预期,促使他们不断将手中的资源数字化,扩充自身电子书的容量。在扩充电子书资源的同时,一些电子书制作、加工企业也在积极深化电子书加工层次,挖掘其潜在价值,进一步开发电子书资源。当前,电子书内容的深加工趋向愈发明显,从数字化到内容聚合、语义抽取,体现着电子书制作与加工由浅层次的粗加工转向深层次的内容挖掘。特别是在未来一段时间内,电子书深层次加工变得尤其重要。
尽管在2010年,原新聞出版总署在《关于发展电子书产业的意见》中明确提出,我们要丰富电子书内容资源,优化传统出版资源数字化转换质量[1]。然而,当前的电子书加工普遍存在版面设计不够专业、无法构建人性化阅读体验的问题[2]。许多电子书仅仅是传统书籍的扫描版或者内容文字的简单再现,忽略了排版质量。其结果就是阅读体验差、阅读效果不理想。而纯粹的人工精细排版又耗时、费力,并不被大家认可。因此,如何将专业的排版与计算机程序自动排版相结合,成为在电子书制作、加工过程中面临的重要问题。本文正是针对这一问题展开研究,利用可扩展标记语言(Extensible Markup Language, XML)实现电子书自动排版与专业排版相结合,基本达到电子书自排版的专业化效果。
2 电子书自排版的需求
电子书在制作、加工过程中实现自动排版,是电子书深加工中的重要一环。其不仅可以自动实现专业排版效果,还可以实现电子书个性化输出,提供符合用户需求偏好的文档。因此,电子书自动排版不仅符合电子书制作数字化的要求,同时是用户终端多元需求的体现,能够带给用户最佳的数字内容体验。
2.1 满足“一次制作、多元发布”的需求
电子书自动排版离不开用户的需求。用户需求的差异使得电子书生产商面临多种类型文档与跨终端排版的需求,而“一次制作、多元发布”是电子书内容生产商满足用户差异化需求的最佳方案。所谓“一次制作、多元发布”,并不单纯是介质的不同而多元发布,有时还会因为时间、人物、地点的不同,需要以不同的风貌和方式展示,其内容本身有一个体系,能根据阅读内容产生新的、更为专业的内容[3]。其中,“一次制作”要求电子书在制作过程中一次性完成电子书文档内容的描述,“多元发布”则能根据用户的终端和需求发布不同样式或内容差异化的产品。前者需要我们采取通用语言来描述电子书内容,在发布的时候能够被识别、调取,而后者则需要自动判别用户需求,将排好的版面内容发布给用户。
当前许多电子书加工企业并没有采取“一次制作、多元发布”模式,而更多的是采用分别制作多种类型电子书的方式来满足供不同用户需要的解决方案。这不仅耗费人力与资源,增加不必要的成本,同时降低了电子书制作的效率。电子书实现自排版则满足多种终端用户的多种类型文档需求,也大大减少了电子书内容生产商、加工商的工作量,降低了制作、发布成本。
2.2 内容重组、动态重排的需要
电子书内容的加工实际上是将电子书的内容按照某一主题或某一特性重新组织起来展示给终端用户。电子书的内容再组织需要将其内容碎片化、片段化,为内容重组提供再组织单元。同样,某些特定的碎片化内容也可以按照某一特定主题需求来形成一本新书。这使得资源之间原本存在的界限变得越来越模糊,资源之间的转换组合变得更加容易[4]。高效率的内容重组是将电子书内容按照某种通用的语言如XML来表述,并实现动态重组。通用语言能够保持内容交换的一致性,这也符合美国国家信息标准组织(National Information Sstandards Organization,NISO)开放发现倡议的要求[5]。动态重组使电子书提供平台能实现内容动态的自由组合,其实质是电子书内容动态的更新过程。
电子书的内容需要重组,而重组则需要重排。重排是将内容根据重组要求、按照某种特定样式输出。重组为自动重组,而重排则需要专业化排版与自动排版相结合。自动排版可以适应内容重组的需要,能根据用户需求的转变而变化。专业化排版能够制定精美的版面效果,这往往是自动排版欠缺的。因此,在电子书内容的动态更新中需要将二者相结合。通过设定专业的样式文档,再利用可靠的转换文档,将电子书内容按照样式文档要求自动转换成带格式的输出文档,从而实现电子书的自排版。
当前,我们正处在电子书交互平台2.0时代,人们的读、写、评论、分享等交互性行为变得极其简单[6]。这使一些新的电子书类型如交互式电子书、增强型电子书(Enhanced book)等新的类型在不断呈现,也使一些新的技术与方法也不断在集成一些新的内容融入到电子书中,形成新型电子书[7]。 这都需要我们充分发挥计算机自动处理能力,使电子书实现自动生成、自动排版,动态适应时代的需求。
2.3 数字内容体验的需求
广义的电子书,是指以传播知识为目的,把特定的主题和内容以一定的电子格式呈现在各类电子设备形态上,以方便读者阅读的“著作物”[8]。其中,“一定的电子格式”要求电子书不仅要注重内容质量,还要注重用户的阅读体验和审美效果。尽管在阅读2.0环境下,共享性和互动性对阅读而言十分重要[9],但是良好的排版结构往往具有更好的口碑,能够更广泛地在社交媒体中散播,吸引更多读者的青睐。
电子书相对于传统书籍而言是一个新事物,它一直在不断地应用创新型技术于电子书的制作、加工、发布之中。借助这些技术,它为读者带来了全新的数字内容体验,也增强了自身对用户的吸引力。电子书自排版将数字化内容与用户偏好的样式结合起来,根据特殊需求,在设置特定排版条件下自动实现电子书输出。它使电子书更具有可读性与交互性。目前,一些公司如多看、亚马逊等已经认识到当前电子书阅读体验差的问题,正在积极着手改善排版效果,追求极致的用户体验,以实现看电子书胜于传统书籍的目标。
3 本文的解决思路
要实现电子书自排版,首先需要符合“数字第一”工作流程的要求。该流程是先制作一个数字文档,通过这个电子文档再产生出不同的出版格式,如EPUB电子版、苹果电子版、网络版、手机版和印刷版[10]。基于这种解决思路,本文采取分段式方法处理电子书。首先将需要处理的文本内容细化至段,以段为出发点,以段所包含的图片、文字、表格等为基本处理单元,将文本内容细化为单元块,为以后文档的处理提供基础。“数字第一”工作流程的基础是XML标识语言。因此,利用XML语言来描述电子书的内容,采用XSL将其转化为所需输出的文檔类型,再采取参数模板形式规定样式参数,并通过调取实现参数传递,从而实现电子书的自排版。在整个流程中,对电子书采取“文档—章—节—小节—段”这种结构进行切分,而将段放置在内容块中,以内容作为描述的基本单元,将文档层层细化,最后利用样式参数进行描述。
XML是以文本为基础展示结构信息的描述语言,也是应用最广泛的分享结构信息的格式化语言之一。XML文档采取树形结构,具有良好的结构性。利用XML描述电子书的优点是能够利用其树形结构来获取它的任何枝节,符合电子书内容碎片化的要求。同时,还能增加语义方面的描述,为电子书内容的语义检索与进一步开发利用提供便利和支持。
电子书自排版的实现主要依赖独立的参数模板来实现。利用XSLT中的para参数将排版的格式值设置为参数值,形成独立的参数文档。再利用XSL的调取功能实现参数调取,进而将参数值传递给XSLT文档。最后利用XSLT的转换文档功能,将XSL文档转换为带格式的FO文档。FO文档最终被FO处理器转换成用户所需类型的格式文档输出。独立的参数文档能够根据用户的偏好与用户的阅读终端设置不同的参数,从而达到个性化设置,也可以采取专业的排版参数设计,实现专业化的自排版。本文采取专业的排版参数设计,最终输出HTML和PDF两种通用的电子书。
4 电子书自排版系统的实现
4.1 电子书自排版整体的结构
整个自排版体系包含五个组成部分,如图1所示。各个部分的功能具体如下。
基于XML的电子书。主要利用XML标识语言来描述电子书内容,形成基于XML标识的电子书。在描述电子书过程中最重要的是必须建立一套有效的电子书内容结构体系,系统、完整地描述整个电子书涉及的内容。
XSL模板库。它由一系列模板组成,包括转换模板、基础模板、参数模板等。模板库负责将基于XML的电子书描述为其他标识语言所描述的文档,实现基于XML的电子书到其他类型文档的转换描述。模板库因转换的对象不同而不同。本文的模板库包含两套,分别为HTML模板库、FO模板库。
转换文档。转换文档为XSLT处理器根据XSL模板库的描述要求,将基于XML的电子书转化为带格式的目标类型文档。它是转换描述的实现。本文的转换文档主要是HTML文档和FO文档。
处理器。处理器主要包含两部分,一是转换处理器,二是显示处理器。转换处理器负责将原电子书文档转换为转换文档,也将转换文档转换为其他语言,如ps描述的文档。显示处理器负责将转换好的文档显示出来,主要是PDF阅读器、IE浏览器。
输出文档。输出文档为最终的显示文档,它由相应的处理器自动生成。
4.2 基于XML的电子书结构设计
本文对于电子书(E-book)的设计依据传统的中文书籍的编排体例分为四部分:元信息(Meta)部分、页面信息(Page-info)部分、章(Chapter)部分和其他信息部分,如图2所示。元信息部分主要存放电子书的元数据,主要包含作者、年份、出版社、版权等内容信息。页面信息部分主要包含在显示页面上的页眉、页脚部分的内容,对应页面的上留白、下留白的内容。章部分是电子书内容的主体,它包含有章标题、章副标题以及节(Section)。节是由节标题、内容块、小节(Part)组成。因为很多书籍在章下与节前都有章内容的简介或者是引导性的阐述,所以章也包含有内容块。小节是电子书存放内容块的主体部分,也就是包含有主要内容的单元模块。
内容块是页面内容的基本单元,其内存放的是段落形式的具体内容,是电子书主要内容的具体存放地。内容块既是存放显示内容的地方,也是排版的对象。本系统需要显示的内容都存放在内容块中。段落是电子书的基本内容。在段落里是由文本单元、图片单元、表格单元、列表单元等组成的供显示内容单元。这些内容单元对应传统书籍中的文本、图片、表格等。
4.3 模板库的设计
转换模板的设计。主要是电子书内容的XSL处理部分。转换模板负责转换文档的描述、文档结构设计、页面布局设计等方面的内容,并根据不同的结果文档构建不同的转换模板。本文因为输出PDF和HTML,所以转换模板包含HTML转换模板和FO转换模板。
由于可以不用分页,HTML模板库的转换模板比较简单,内容直接放在头(Head)部分和体(Body)部分,并利用分割元素
而FO模板库则相对比较复杂。它包含有页面模板(layout-mast-set)、文档树(bookmark-tree)以及页面排序(page-sequence)等模块。负责文档页面结构的描述,它由多个单页面模板(simple-page-master)以及一个页面排序模板(page-sequence-master)组成。单页面模板通过分区,主要包含有主体区(region-body)、顶部区域(region-before)、底部区域(region-after)、左部区域(region-start)、右部区域(region-end)来确定页面布局,并利用相应的属性来设置区域大小。页面排序模板来确定重复出现的页面。电子书的主要内容放置的页面都是由它来确定的。文档树负责对书签的描述,通过属性关联属性(internal-destination)的值与对应的章、节、小节的id值来建立对应书签联系。页面排序是文档内容的主要存放地。一部电子书可以有多个页面排序,每个页面排序定义一个显示的内容范围。本文定了三个,分别是首页、尾页和可重复的中间页。首页对应于传统的封面页,尾页主要用于标示文档结束,可重复的中间页是内容存放地。每个都包含有一个流元素(flow)和多个静态内容元素(static-content)。在流元素中,本文利用“文档—章—节—小节—段”这种结构,结合XSL的循环描述语句,采取文档调取相应的章的章(template),而章调取对应的节的节,节调取对应的段将文档内容逐层描述。页眉、页脚的内容放在静态内容区中显示。
基礎模板的设计。这是电子书自排版最基本的部分,也是内容块中涉及段的描述部分。它负责确定段内容的各个元素显示的内容以及样式,包含文字处理、图片处理、表格处理、列表处理等内容。在基础模板中,通过为元素设立属性来确定样式,而属性的值与外部的参数模板中的参数相对应。在这一部分我们还可以设置相应的排版规则来约束内容排版的设计。
参数模板的设计。参数模板由一系列参数(param)组成。它独立于转换模板与基础模板之外。参数模板作用是向转换模板和基础模板提供排版参数。参数模板中包含文档参数、页面参数、段落参数、文本参数等。各个参数对应转换模板与基础模板中元素属性的值。参数的值决定电子书页面的样式与内容显示的效果。基础模板与参数模板都通过XSL 的导入元素(import)导入到转换模板中。
本文的参数模板中参数的值采取专业软件的对比设计,再将设计涉及的样式值转换成对应参数的值,形成参数文档。具体的做法是:首先利用专业的排版软件对版面进行设计,并通过大量测试,产生专业的排版样式表。再通过建立XSL参数模板与样式表映射关系,实现专业排版的样式与参数模板中的参数相互对应。最后通过映射关系,将样式表的值转换为参数模板中的参数值,形成参数文档。本文在设计过程中,设计了多套参数文档,通过改变导入(import)的文档名实现多重样式的选择。同时,也允许用户建立自己的参数文档,利用与用户的信息关联达到符合自排版的效果。
4.4 转换处理器的使用
XSLT处理器负责读取基于XML的电子书内容,并按照XSL文档的处理要求生成相应的文档。目前相关的XSLT处理器主要有MSXML、Saxon等,本文使用的是基于GNOME项目的libxslt。
FO处理器负责读取FO文档,并将其转换为其他文档。因为FO文档是基于XML的格式描述文档,并不是常见的PDF文档,需要使用FO处理器将其转换为PDF文档。本文使用的Apach公司开发的FOP处理器,来实现FO文档到PDF文档的转换。
5 结 语
本文基于前面设计的XML电子书,再利用模板库中的三类模板,实现HTML和PDF格式的电子书的输出,如图3所示。输出的电子书带有设计的排版参数,基本上满足格式的自排版输出。但也存在一些不足之处,主要是自动排版采取模板模式存在灵活性不足的问题。同时,FOP处理器并没有完全支持XSL-FO,因此,有些样式因缺乏支持而没有达到理想效果。这些都有待改进。