This paper does a deep research on content model architecture’s structure, application mechanism and the scalability, flexibility and inheritability with the use of CMA. Finally, based on two cases, it provides a preliminary discussion of how to use CMA to preserve complex digital content.
Fedora(Flexible Extensible Digital Object Repository Architecture)是康奈尔大学(Cornell University)研究的对数字内容进行存储、管理及获取的一个框架[ 1],Fedora Repository是依据该框架实现的一个开源软件仓储系统[ 2](简称Fedora),该软件由Fedora Commons[ 3]提供开发支持。Fedora不仅提供了核心仓储功能,同时也提供了一些相关的服务和应用(如Search、OAI-PMH)。由于Fedora良好的设计架构及灵活扩展能力,越来越多的机构使用Fedora进行数字内容存储研究及实际应用,如eSciDoc[ 4]、DANS[ 5]等①。
Fedora仓储系统具有强大的灵活性和可扩展性,可以对文本、音频、视频、数据、数据集等多种数据类型进行处理,适用于多种应用场景,满足不同层次的需求。这些特点得益于其良好的实现方式和设计理念,在Fedora3.0及后续版本中提出的内容模型框架(Content Model Architecture,CMA )概念是其重要的组成部分,相对于旧版本对数字内容的管理方式有了重要改进,如更加简单、灵活及可扩展,符合现实中管理数字内容的模式及高效地交流知识产品。本文分析Fedora的数字内容管理模式,深入研究了其内容模型框架的构成和使用原理,以及所带来的灵活性、可扩展性和可继承性等特点,并结合实际案例初步探讨了利用内容模型框架对复杂数字对象进行保存管理,以期为Fedora在复杂数字对象的保存实践中提供有益参考借鉴。
在Fedora中,所有的数字内容都是以数字对象[ 7](Data Object)的形式管理,每个数字对象由多个组件组成,组件既可以是内容,也可以是元数据。一些元数据是系统保留元数据,如DC、AUDIT、RELS-EXT、RELS-INT等,它们记录了该对象的一些关键元数据内容由于对Fedora数字对象介绍的资料已经比较丰富,这里不再赘述。。在Fedora3.0以后,引入了内容模型框架的管理方式。将数字内容的管理对象化、服务化,提供了一个更加高效、灵活的管理模式。以下主要依据文献[6]和文献[7]对CMA进行介绍。
Fedora内容模型采用了类似分类的概念对数字对象进行管理,正如将图书馆的资源按照书籍、期刊、报纸等进行分类管理。Fedora为具有相似特征的数字对象创建一个内容模型,然后对该模型定义服务,属于该模型的数字对象共享该模型的服务。
内容模型框架CMA通过定义4种类型数字对象来实现,包括Content Model Object(CModel),Data Object(Data),Service Definition Object(SDef),Service Deployment Object(SDep)。其中CModel内容模型对象,是对普通数字对象的概括,是Data对象的“类”;Data是普通的数字对象,属于定义的某个CModel对象;SDef对CModel所具有的服务进行定义,并不具体实现;SDep针对某个CModel指明某个SDef的具体实现方式;SDef与SDep共同定义并实现了内容模型对象的服务。这4种数字对象都是Fedora数字对象,通过它们的功能分别进行分类。4者之间的关系[ 7]如图 1所示:
![]() | 图1 4种对象之间的关系[ 7] |
CModel是一个控制对象(Control Object),它就像一个内容模型文档的容器,内容模型是具有相似特征的数据对象。它同时提供了一个在不同数据对象组之间进行允许、排除、需求等关系的模型。所有的数据对象包括Data、SDef、SDep和CModel都被CModel Object以类进行组织。在CModel中声明hasService关系与SDef建立关系,指明该对象可以具有的服务类型。CModel在ds-composite-model Datastream规定了属于该“类”的Data Object必须包含的Datastream。
Data Object是用来存储数字内容实体的具体形式,它的Datastream用来表现该数字内容的各个方面,通过在RELS-EXT Datastream中声明与0个或多个CModel对象建立关系,同时必须与所有的声明的CModel保持一致。
SDef也是一种控制对象,用来存储服务的模型。一个服务包含一个数据对象支持的操作集合。即面向对象编程中,一个SDef定义了操作的“接口(Interface)”,该接口列出了支持的操作,但没有指明怎样实现这些操作。为了使用这些操作,需要指明数据对象、SDef、操作的名字。一些操作需要数据对象的Datastream,或者一些外部的参数,在使用时传入。
SDep也是一种控制对象,主要来表述对CModel进行操作定义的SDef的具体实现方式。主要任务是告诉Fedora怎样去执行SDef定义的操作。在CMA框架下,一个SDep行为只针对摄入它的特定仓储,不同的仓储可以自由实现SDef定义的功能。在一个SDep Object中存储了多种类型的元数据来描述服务执行的方式,其中最重要的元数据格式是Web服务描述语言(Web Services Description Language,WSDL),通过WSDL,Fedora与客户端进行标准化的交流。同时在该对象中还包含与SDef和CModel相联系的元数据部分(isDeploymentOf和isContractorOf),指明具体服务定义对象和服务实施对象。
值得注意的是Fedora自动假定所有的对象与系统自带“Basic Content Model”保持一致(即属于该“类”),对于Basic Content Model,系统定义了“Basic Service Definition”,使所有的数字对象都具有该服务,该服务提供直接获取对象的Datastream的操作。
(1)可复用性。在CMA框架中,改变了对每一个单一数字对象进行管理的模式,对一“类”数字对象进行管理;改变了对每个对象定义Desiminator的方式,对每个类进行定义并实现,这样减少了创建、摄取、存储、管理、保存、转换及获取数字内容的工作,使工作更加高效。
(2)具有良好的灵活性、扩展性及适用性。由于定义了CModel、SDef和SDep,可以灵活地对它们进行更改来满足新的需求,如增加新类型的保存内容,改变原有内容呈现形式等,使得Fedora具有更好的灵活性、扩展性及适应性。
(3)数字内容不以其存在的格式或技术来定义,而将一些功能合并为它的特性,以内容逻辑单元进行管理。例如一个电子表格或者游戏软件需要特定的软件或系统来实现,这些特点决定了需要记录这些“必要的信息”,而随着时间和技术的发展,这些必要信息可以帮助展示这些内容。
(4)对三个重要的并且相互关联发展的软件工程概念的理解及应用:面向对象编程(Object-oriented Programming),设计模式(Design Patterns)和模型驱动架构(Model-driven Architectures)[ 6]。在后续的Fedora开发中,会对内容对象模型进一步开发。
Fedora的CMA管理方式以其通用性、灵活性在多种类型的数字资源保存中得到广泛的应用,下面将分别介绍使用CMA的保存图书案例和威斯康星州大学数据保存中心(University of Wisconsin Digital Collections)保存数字资源[ 8, 9]的案例,为大家在实际使用Fedora CMA保存数字内容提供参考。
图书馆面临的一个重要任务是保存图书,笔者使用Fedora中的CMA管理方式对目前比较常见的PDF电子图书进行了保存尝试,并以此为例介绍CMA的初步使用方法。电子图书CMA 管理方式如图2所示:
这里假定电子图书的基本情况是:每本电子图书分为多个章节,每个章节由下级章节或者文章组成,文章由一个包含文章的PDF文件呈现。
(1)定义保存内容的Content Model Object
按照内容模型的建模思想,内容模型可以按照实际的逻辑对象建立,即按照原来对图书进行管理的方式进行建模。这里建立4种CModel对象,即图 2中的中间层:Book、Chapter、Article、PDF文件。每个CModel规定了其使用的服务、必要的元数据等信息。例如对于Book这个内容模型对象需要特定的服务,该服务由SDef与SDep共同完成,在ds-composite-model Datastream规定必须包含的元数据是DC、RELS-EXT。在PDF文件中可以自定义一些元数据信息,如对文件的版本、兼容性等的记录。
(2)定义并实现服务
对于每一个CModel对象,都需要有相应的服务来对数字内容进行呈现或者其他操作。这些服务由SDef对象与SDep对象合作完成。例如,对于Book对象,需要的服务有呈现章节信息、文章数量、出版信息等。对于以上需求,在一个SDef中可以定义三个方法,分别返回相应的信息,并与Book对象绑定(Book声明与SDef的hasService关系)。在SDep中定义与SDef相对应的实现方法,并且与相应的CModel和SDef绑定(声明isContractorOf和isDeploymentOf关系)。其他CModel对象的服务定义略。
(3)创建数据对象
相对于不同的CModel对象,创建不同的数据对象,并且建立起数据对象之间的关系(见图2中Data Object部分)。对于每个数据对象,需要声明与对应CModel的关系hasModel;对于Chapter Data Object,需要声明与某个Book Data Object的isChapterOf的关系或者与某个Chapter Data Object的isChapterOf的关系,如图2中CData1声明与BData1的isChpaterOf的关系,CData2声明了与CData1的isChapterOf的关系;对于Article Data Object需要声明与Chapter Data Object的isArticleOf的关系,如AData1声明了与CData1的isArticleOf的关系,AData2声明了与CData1的isArticleOf的关系;同时对于每个Article Data Object包含0到多个PDF文件,需要声明Article Data Object与 PDF Data Object的hasPDF的关系,如AData1声明了与PData1的hasPDF的关系,AData2声明了与PData2和PData3的hasPDF的关系。
通过创建以上的对象及建立各对象之间的关系,就可以在Fedora中对PDF电子图书进行保存管理。通过定义的服务,Fedora可以与客户端进行标准协议的交互,实现完整的仓储功能。通过以上设计,笔者对少量电子书进行了简单的存储,对模型的可行性进行了验证。
威斯康星州大学数据保存中心始于20世纪90年代末一个保存HTML图书的项目,目前保存内容涵盖图书、图像、音频、视频以及档案检索工具(Archival Finding Aids)等多种类型的数字内容。该图书馆在使用Fedora3.0时,以CMA框架为基础,实现了对复杂数字对象的保存。以下内容介绍主要依据文献[9]。
(1)定义复杂数字对象模型
复杂数字对象可以抽象概括出相似的结构特征。如保存内容中的一首民谣http://digital.library.wisc.edu/1711.dl/SSRecIDSearch?repl1=WiscFolkSong&repl2=WiscFolkSong.000089.bib,是由一个音频流、一系列的图片和一个PDF的音乐曲谱组成,其中的音频、图片、PDF文件又是由不同格式的数字位流(Bitstream)组成,其逻辑对象组成示意图[ 9]如图3所示:
![]() | 图3 逻辑对象组成示意图[ 9] |
在物理上这些数据位流没有本质的不同,都是由二进制编码组成。在结构上可以分为Simple对象和Composite对象,其中Composite对象由Simple对象组成(见图3Composite与Simple框)。在功能上可分为FirstClass对象和SecondClass对象;FirstClass对象是日常逻辑对象,如电子书、民谣、画集等,SecondClass是逻辑对象的组件,如PDF文件、音频、视频等数字媒体(见图3FirstClass与SecondClass框)。
在本模型中最重要的内容对象模型(CModel)是FirstClass Object,属于该对象模型的数据对象(Data)仅包含描述信息和结构指示信息。虽然有很多逻辑对象如画集中的图画,仅包含一个图画位流,可以简单地把该位流包含到其对应的FirstClassData中去,但是为了严格地表征所有数字对象,所有的物理内容存储到SecondClass中的Data中去。
(2)定义内容模型
在Fedora3.0里定义了以下几种内容模型对象,这些内容模型对象是进行实际保存的基础。
①CModelUWDCObject
该对象是所有UWDC Objects的父对象。该模型与“BasicContentModel”类似,表示存储的所有数据对象都属于该内容模型对象。
②CModelFirstClassObject
该对象是逻辑对象的模型,所有的逻辑对象都属于该对象。属于该模型的对象必须包含有关该对象的描述元数据(该中心规定的是使用MODS[ 10]描述元数据的BIBn Datastreams),并且在RELS-EXT Datastream中包含一个或多个指向子对象的指针。该模型实现了包含viewMETS()方法的服务,服务由SDef与SDef共同实现,这里不详细讨论。
③CModelCompositeObject
该对象是指包含子对象的对象模型,用来严格地表现一个拥有子对象的逻辑对象的结构关系。属于该模型的对象包含一个METS[ 11]定义的表示结构性的Datastream,属于该模型对象的数据对象的RELS-EXT Datastreams假定包含一个RDF指针指向子对象。
④CModelImageWithSequence
该对象是用来表示包含相关图片的内容模型对象。属于该模型的数据对象Datastreams中包含子对象、分发方法、几何数据等,RELS-EXT Datastream包含一些指向子图像的指针。属于该模型的对象也被认为属于CModelCompositeObject。
⑤CModelAudioStream、CModelImageWithDefaultRes、CMo-delDocument等。
该模型表示仅存储数字位流的数据对象。属于该模型的数据对象没有辅助的结构,不包含描述元数据和指针,仅包含数据位流Datastream。本模型的主要功能是提供针对特定数据位流格式相关的服务。
Fedora不支持继承,所以应用“mix-in”策略指数据对象(DataObject)可以属于多个内容模型对象(CModel)。来表现多重继承:只要能够合理地描述内容并保持层级关系,一个对象可以属于多种模型。
创建内容模型完成后,可以创建包含viewMETS()分发方法的服务,来返回FirstClassObject的结构。该分发器利用FirstClassObject的PID作为参数,返回一个METS XML文档,该文档包含该对象的描述元数据,同时返回相关子对象及子对象的分发方法的链接。这就允许使用一个API来对复杂内容对象进行检索和呈现,保证了接口的统一性。
(3)民谣存储示例
民谣存储示例如图4所示:
![]() | 图4 民谣存储示例图[ 9] |
对于一首民谣,存储为数据对象uwdc:WiscFolkSong.0089,该对象与CModelUWDCObject、CModelFirstClassObject、CModelCompositeObject三个内容对象保存一致,该对象包含三个子对象:uwdc:WiscFolkSong.0089a、uwdc:WiscFolkSong.0089b、uwdc:WiscFolkSong.0089c。
对于uwdc:WiscFolkSong.0089b对象,其包含图像子对象,该对象与CModelUWDCObject、CModelCompositeObject、CModelImageWithSequence三个内容模型保持一致;该对象包含两个子对象uwdc:WiscFolkSong.0089b.01、uwdc:WiscFolkSong.0089b.02。
对于uwdc:WiscFolkSong.0089a、uwdc:WiscFolkSong.0089b.01、 uwdc:WiscFolkSong.0089b.02、uwdc:WiscFolkSong.0089c这4个简单数据对象,不包含子对象,只包含物理数据位流Datastream及其他元数据。
uwdc:WiscFolkSong.0089a与CModelUWDCObject、CModelAudioStream保持一致。uwdc:WiscFolkSong.0089b.01、uwdc:WiscFolkSong.0089b.02与CModelAudioStream、CModelImageWithDefaultRes、CModelImageWithXLarge表明该对象包含大、中、小三个图像的内容模型对象。三个内容模型对象保持一致。 uwdc:WiscFolkSong.0089c与CModelUWDCObject、CModelDocument保持一致。
本节所分析的这两个案例,前者主要针对某一种数字资源进行建模保存,而后者针对大多数数字资源统一建模保存,具有更强的灵活性。不过也要注意到后者保存方式有些抽象,建立数据对象时要考虑到与多个内容模型的一致性,增加了复杂度和出错几率。
通过分析不难看出,使用Fedora CMA模型对各种类型数字对象进行存储与管理时,其应用的关键在于建立合适的内容模型对象,而在建立合适的内容模型对象过程中,特别是针对复杂数字对象的内容模型,应该注意充分考虑和分析数字内容的主要特征,建立适用于大多数数字内容保存的统一内容模型对象;建立统一的访问API,方便后续的相关操作;通过对这些对象的“继承”,可以方便地建立新的内容模型对象,从而快速应对新类型数字内容的保存管理,也因此能够充分而有效地保持和发挥CMA的灵活性、可扩展性以及可继承性等特点。
虽然CMA增加了系统的灵活性等特性,但其也有不利的一些方面:设计相对复杂,需要综合考虑需求进行建模设计,对设计人员要求较高;增加了系统的复杂性,很多保存项目不需要非常复杂的内容模型。有很多项目在利用CMA时主要采纳简单的内容模型,如eSciDoc项目[ 4, 12]。
在实际使用Fedora时,也要注意:虽然Fedora3.x版本兼容2.x版本的存储管理模式,但如果想更好地管理数字对象,充分利用Fedora Service Framework所提供和将要提供的多种功能模块,就需要对Fedora数字对象管理方式及内容模型框架有清晰的认识,并有效地应用,因此了解Fedora的CMA管理模式非常有必要。另外在使用CMA过程中也应注意吸收借鉴已有项目实施管理的经验,结合保存内容自身的特征,更好地对数字内容进行存储管理,充分发挥CMA的灵活性、可扩展性以及可继承性,解决复杂数字内容保存问题。
[1] |
|
[2] |
|
[3] |
|
[4] |
|
[5] |
|
[6] |
|
[7] |
|
[8] |
|
[9] |
|
[10] |
|
[11] |
|
[12] |
|