EDBS简介——基于TRIP数据库系统的电子文档的建库操作IntroductiontoCreationofE-filesDataBaseSysteminTRIP2009-12-04文本数据的大批量装入TRIP数据库问题,TRIP系统已经提供有现成的TDBS(TextDataBaseSystem)解决方案,只要把待装入的数据生成tform格式的文本文件,然后,或则调用、运行load/loadix程序,或则进入TRIP系统通过后台菜单操作,即可将大批的数据倒入进TRIP系统。对于电子格式文档(E-formattedFiles),如Word、PDF、PPT…,TRIP亦提供现成的开发平台——TRIPview,据此用户可以开发出自己的电子文档数据库系统(EDBS),在把电子文档装入数据库的一个string字段的同时,还将文档中的文字内容抽取出来放在一个文本text字段,进行倒排处理,以实现对全文内容的快速查找,并显示出原有的文件格式。利用TRIPview来建立用户自己的EDBS系统需要一定的开发量。若对原文的内容需要进行查找的应用,TRIPview是最好的选择,目前它可以处理多达220多种格式的电子文档。如果对原文内容不需要进行查找(例如是jpg、gif等无文字内容的电子文件),亦即不需对原文件抽取文字内容的情况,则不必用TRIPview而是利用TRIPtoolkit提供开发工具开发简单的应用程序,就可以将它们写进TRIP记录中的string字段。下面介绍两种如何把电子文件写入TRIP数据库的方法,一种属于B/S方式,通过浏览器将一个或多个图片文件,一次一个记录的装进本地或远程的TRIP数据库,另一种是在TRIP服务器端(Server-side)批量的将文件写入TRIP数据库。前者通过CGI(公共网关接口)程序调用TRIPtoolkit,后者直接访问TRIP底层,两者均用标准C语言开发,效率相当高。最后介绍如何利用CGI程序对已有的记录,添加新的电子文件或者替换旧有的的文件。数据库的字段约定(Conventions)与文字数据不同,一个电子文件存放在TRIP数据库记录中时,少则需两个字段多则需四个字段来描述。少则者一:存放文件名的词组phrase字段,二:存放全部文件内容信息的string字段。多则者第三:存文件大小的数值int字段,第四:存放从原格式文件抽取出来的文字内容的文本text字段。鉴于程序访问TRIP时往往是通过字段号来定位的,本文介绍的程序对上述的文件名字段、文件大小字段以及string字段的段号安排均作了如下约定:如果文件名字段号取n的话,文件大小字段号则为n+1,string字段号则为n+2。因此用户在利用本程序进行数据库字段设计时务必遵循这一约定,否则程序不能正常运行。对于已经有内容的数据库,如果字段顺序不符合本约定,必须预先把数据库设计改变过来,才能使用此处介绍的程序继续给TRIP数据库追加电子文档。至于原先的数据(假定还没有string字段的数据),需要编写一个输出格式把它生成tform文件,然后再装入结构已经更新的数据库。一、B/S模式的EDBS建库方法通过浏览器的上传表单和Web服务器上的cgi程序upload,将本地数据(包括文字及二进制文件)装入Web服务器所在的TRIP数据库。每次只能上传、建成一个记录。要做的准备工作是:制作上传表单;修改上传配置文件upload.cfg;设置权限。1、制作上传表单上传表单是一个HTML文件,它可以从现用的上传文件复制、修改而成。它不仅用作录入数据的界面,即工作单,还用来控制上传的数据的走向,包括存入到库里的哪些字段,以及上传文件将存放在什么地方:是直接进入字段?还是存放在哪一个目录下。上传表单中有几行是专作上传控制用的,再有若干行作录入数据用。命名表单名最好与库名相同,这样给不同的数据库上传可采用不同的表单,实现各个库各自独特的设置要求。如上传的数据要写入TRIP的bch库,则上传表单名可定为bch.html。该表单放在web服务器的文件根目录下(在LinuxApach服务器情况下,…/往往被设置成web文件的根目录)。如下以bch.html为例对上传表单作一简要说明。控制行带有“hidden”标签的value值,是控制上传行为用的:inputtype=hiddenname=basevalue=inputtype=hiddenname=DocRootvalue=/…/…/…/inputtype=hiddenname=WriteStrvalue=Base值指定给哪个数据库上传,没有它则不知装给哪个数据库。DocRoot定义上传文件将存放的目录,后面一定要用斜线结尾,否则文件将放在上一个目录,而上传文件名字也将改变。如无DocRoot的内容,上传文件将放在upload.cfg设定的目录。WriteStr这行设置上传的文件要写进TRIP数据库的STRING字段,其value可不设定,只要有name=WriteStr的这一行,上传来的文件就会写入STRING字段中。若无此行,文件将存放在前述(DocRoot或upload.cfg中root)指定的目录中,并不写入TRIP数据库。如果需要记录上传的时间,则需加上如下一行:inputtype=hiddenname=datevalue=^nf其中,name=date表示要把上传的时间记录在数据库中编号为n的字段,当然设计数据库时要设立这字段,其字段名可随意定,程序会自动把上传的时间写入n字段中。数据录入行数据录入行将决定用户录入的数据将存到哪一个字段。录入的数据包括两种,一种是通过屏幕直接录入到TRIP字段中的文字数据,这包括文本字段、词组字段、数字、日期、时间等,第二种是录入想要上传文件的文件名。文字数据字段录入行按照如下配置:inputtype=textname=^nfvalue=字段的name必须是^nf。此处n为数据库结构中该“字段名”的编号。注意这里并不用库中的字段名,而用字段号。在TRIP库中,一旦库结构被设计好后,字段名还是可以改变的,字段号就不能改。所以这里用字段号作name。上传文件名字段的配置是:inputtype=filename=^mfsize=30上述配置用于输写上传文件的文件名。上传文件在本地的路径及文件名将被上传到TRIP服务器,并存放在字段编号为m的phrase字段中。注意,上传表单的类型file和TRIP数据库的字段类型不是一回事,前者,是告诉HTTP要用file传输协议,后者是TRIP数据库中存放上传来的文件名的字段。上传表单上的字段号m一旦被设定,将涉及到另外两个TRIP字段的设计。第一个是紧接着字段号m之后的m+1字段,它用于存放文件的大小,字段数据类型需为数值num型。再下一个编号是m+2的字段,将存放上传文件的真正内容,类型为STRING。在设计TRIP数据库结构时,上述三个字段的字段名可以随意设定,但字段的编号必须按照上述m,m+1,m+2的规则,这种约定是由上传程序upload规定的。上传表单(工作单)样例假定制作的表单要给BCH数据库的文字字段1、2、3、4、5、6、9写数据,还要上传原格式文件(文件名字段是15),那么设计成如下布局的表单即可:上述布局工作单的html代码如下:htmlheadmetahttp-equiv=Content-Typecontent=text/html;charset=gb2312/headbodybgcolor=#8eb0caformaction=/cgi-bin/uploadenctype=multipart/form-datamethod=posttablewidth=50%border=0cellspacing=1cellpadding=8align=centertrtdcolspan=6centerfontsize=5h1上传工作单/h1/font/centerinputtype=hiddenname=basevalue=bchinputtype=hiddenname=DocRootvalue=/data/inputtype=hiddenname=WriteStrvalue=trtdcolspan=2字段1inputtype=textname=^1fvalue=tdcolspan=2字段2inputtype=textname=^2fvalue=tdcolspan=2字段3inputtype=textname=^3fvalue=trtdcolspan=2字段4inputtype=textname=^4fvalue=tdcolspan=4字段5inputtype=textname=^5fvalue=size=51trtdcolspan=6中文名称inputtype=textname=^6fvalue=size=90trtdcolspan=6简介textareaname=^9frows=4cols=88/textareatrtdcolspan=6图片说明textareaname=^14frows=3cols=88/textareatrtdcolspan=6图片文件inputtype=filename=^15fsize=30inputtype=submitvalue=提交br/tr/table/form/body/html2、修改上传配置文件upload.cfg该文件放在cgi-bin的目录下,其名称必须和上传程序upload同名。亦即上传程序upload和配置文件upload.cfg是一一对应的,否则将出错。上传配置文件主要用来控制谁允许上传,上传数据放在什么地方,要不要把上传文件写入TRIP数据库。内容如下:Config=DefaultRoot=/data/FileMask=*IgnoreSubdirs=YESOverWrite=yesWriteStrField=noOkPage=OkPage.htmlBadPage=BadPage.htmlDebug=0IP=168.160.111.111中信所IP=168.160.222.222化工信息IP=此处也有root行和WriteStrField行。但它们只是上传表单的备用设置行,上传表单的设置优先。即上传表单已经设置过了的话,此处的设置则不起作用;上传表单上没有设置,则用此处的值。Upload程序要调用的OkPage.html和BadPage.html文件放在cgi-bin目录下。IP行是控制上传工作站用的。只有此处列有的IP地址工作站才允许上传数据。如果从cgi-bin目录下的upload中考贝生成另外一个名为upl的程序,同样放在cgi-bin目录下,用来上传文件给mybase数据库,那么配置文件名应该取名upl.cfg。上传表单的文件名改动与否均可,但其中的formaction=”/cgi-bin/upload”…程序名upload必须取名upl,以便调用upl程序,同时在inputtype=hiddenname=basevalue=中的base值应改为mybase,这是告诉upl要与数据库mybase打交道。3、权限设置此处涉及三个地方的权限设置。3.1目录上传程序首先将上传的文件存放在由上传表单中的DocRoot指定的磁盘目录下,或者是由upload.cfg配置文件中root指定的目录下,因此该目录必须对web程序执行者赋予写的权限,否则文件将存不下来。web程序的执行者是谁,要有httpd.conf文件中的定义而定,例如httpd,nobody,apache或者是对web程序的执行者所在的小组。3.2数据库上传程序用了名叫tripnet的TRIP用户去访存TRIP系统。因此用户要上传的目标数据库必须给tripnet授予写