周霜菊 吉久明
〔摘 要〕介紹基于XML的信息交換機(jī)制和映射算法,并以華東理工大學(xué)圖書館與校園“一卡通”系統(tǒng)的數(shù)據(jù)同步為例,介紹在不修改圖書館現(xiàn)有系統(tǒng)的前提下,實現(xiàn)圖書館集成系統(tǒng)與“一卡通”系統(tǒng)的集成。結(jié)合XML技術(shù),給出基于Schema XML的第三方數(shù)據(jù)同步接口的校園“一卡通”與圖書館系統(tǒng)數(shù)據(jù)同步的實現(xiàn)方案,并重點介紹了集成方案中基于Schema XML的數(shù)據(jù)同步接口的實現(xiàn)。
〔關(guān)鍵詞〕第三方同步;一卡通;XML Schema
〔中圖分類號〕TP391 〔文獻(xiàn)標(biāo)識碼〕C 〔文章編號〕1008-0821(2009)07-0162-04
A Data Sync Scheme Based on XMLZhou Shuangju Ji Jiuming
(Institute of Scientific and Technical Information,East China University of Science and Technology,
Shanghai 200237),China)
〔Abstract〕Firstly,the paper introduced information-exchange mechanism based on XML and rules about mapping arithmetic based on Schema.Then giving a presentation of the integration scheme of the smart card system and book management system in East China university of science and technology.The design of a universal data sync interface system base parameter is proposed and the major data sync scheme based third party agent technology used in implementation was given.
〔Key words〕third party agent;smart card;XML Schema
國內(nèi)高校的圖書管理系統(tǒng),基本上都是在上世紀(jì)九十年代初發(fā)展起來的,大都比校園“一卡通”發(fā)展得早。因此現(xiàn)有的圖書管理系統(tǒng)與校園“一卡通”接口的問題,就凸顯在“一卡通”的建設(shè)者與圖書館的技術(shù)人員面前[1]。隨著XML技術(shù)的發(fā)展及其相關(guān)技術(shù)體系的日趨完善,XML的可擴(kuò)展性使得異構(gòu)的信息系統(tǒng)之間可以整合不同類型的數(shù)據(jù)源,并且可以利用XML文檔來進(jìn)行數(shù)據(jù)的導(dǎo)入、導(dǎo)出和交換。本文結(jié)合XML技術(shù),給出了基于XML Schema的第三方數(shù)據(jù)同步接口的校園“一卡通”與圖書館系統(tǒng)數(shù)據(jù)同步的實現(xiàn)方案。
1 基于XML的信息交換機(jī)制和映射算法
基于XML Schema的信息交換機(jī)制是一種采用關(guān)系數(shù)據(jù)庫和XML文檔相結(jié)合的數(shù)據(jù)管理機(jī)制,基于這種機(jī)制的信息系統(tǒng)體系結(jié)構(gòu)如圖1所示。該機(jī)制分析用于交換的信息的數(shù)據(jù)結(jié)構(gòu),設(shè)計出相應(yīng)的XML模式,并將模式文檔傳遞給X-RDB功能組件。X-RDB功能組件接收傳遞過來的XML模式文檔和XML文檔,將XML模式影射為數(shù)據(jù)庫關(guān)系模式,采用查詢語言進(jìn)行關(guān)系數(shù)據(jù)庫的更新、查詢、刪除和插入操作[2]。
與DTD模式相比,Schema模式具有強(qiáng)大的復(fù)雜數(shù)據(jù)類型定義和數(shù)據(jù)結(jié)構(gòu)描述功能。直接映射算法是一種比較新的映射算法,其主要設(shè)計思想是根據(jù)一系列規(guī)定的映射法則,將模式中各元素的嵌套關(guān)系和層次結(jié)構(gòu)映射成為關(guān)系數(shù)據(jù)庫支持的標(biāo)準(zhǔn)SQL語句,從而在數(shù)據(jù)庫中建立相應(yīng)的表結(jié)構(gòu)和約束關(guān)系[2]。
2 需求分析與實現(xiàn)思路
華東理工大學(xué)校園卡系統(tǒng)使用的是新開普電子技術(shù)有限公司的數(shù)字化校園解決方案,圖書館采用的是大連網(wǎng)信軟件有限公司的妙思文獻(xiàn)管理系統(tǒng),而圖書館的借書證采用的是校園卡。當(dāng)學(xué)校師生在一卡通中心有新辦卡、掛失、
解掛等數(shù)據(jù)變動時,要求圖書館集成系統(tǒng)數(shù)據(jù)庫進(jìn)行相應(yīng)的數(shù)據(jù)變動。由于兩個系統(tǒng)分屬不同公司開發(fā),沒有統(tǒng)一的接口、標(biāo)準(zhǔn),新開普的一卡通系統(tǒng)數(shù)據(jù)庫采用的是Oracle數(shù)據(jù)庫,而圖書館的妙思文獻(xiàn)管理系統(tǒng)采用SQL Server數(shù)據(jù)庫,這就造成了系統(tǒng)間不能做到互通、互聯(lián)和數(shù)據(jù)分享與更新。
由于業(yè)界沒有相應(yīng)的標(biāo)準(zhǔn)來解決圖書館的數(shù)據(jù)同步問題,當(dāng)被同步的系統(tǒng)升級時,采用直接訪問被同步系統(tǒng)的數(shù)據(jù)庫的方法,很容易給圖書館的工作帶來不便。如我校的校園卡系統(tǒng)在2007年9月突然升級,原有的數(shù)據(jù)結(jié)構(gòu)發(fā)生改變,導(dǎo)致圖書館的數(shù)據(jù)同步系統(tǒng)不能正常運(yùn)行,影響了圖書館的正常流通秩序。為了避免此類情況的再次的發(fā)生,我們正研究設(shè)計基于接口的通用的數(shù)據(jù)同步程序。這種通用程序,不再直接訪問被同步數(shù)據(jù)庫,而是通過在同步程序里增加接口參數(shù)配置模塊。由該模塊配置同步程序所需的接口,包括數(shù)據(jù)庫連接參數(shù)(包括服務(wù)器名稱、數(shù)據(jù)庫名稱、數(shù)據(jù)庫用戶、數(shù)據(jù)庫口令等)、一卡通數(shù)據(jù)庫信息接口參數(shù)、同步數(shù)據(jù)庫信息接口參數(shù)、集成系統(tǒng)信息接口參數(shù)等。這些配置參數(shù)將以文本文件或XML文件形式存儲,通用數(shù)據(jù)同步程序負(fù)責(zé)制定參數(shù)配置文件的XML Schema[3],并提供界面來設(shè)定或修改參數(shù)XML文件,完成接口參數(shù)的修改。
3 基于XML Schema的第三方數(shù)據(jù)同步接口
3.1 系統(tǒng)功能構(gòu)架
數(shù)據(jù)同步系統(tǒng)的功能構(gòu)架分為新開普同步模塊、接口參數(shù)配置模塊、文件模塊、X-RDB功能組件和更新模塊組成,如圖2。通過新開普數(shù)據(jù)同步模塊將一卡通的Oracle數(shù)據(jù)庫復(fù)制成中間同步數(shù)據(jù)庫存放在接口服務(wù)器中。由于一卡通數(shù)據(jù)庫沒有用戶信息的更新流水表,因此在中間數(shù)據(jù)庫增加觸發(fā)器和信息更新流水表,通過觸發(fā)器把卡中心用戶信息變動記錄到信息更新流水表中。當(dāng)一卡通數(shù)據(jù)庫有信息更新時,中間同步數(shù)據(jù)庫信息更新流水表添加一條包含用戶新、舊信息的記錄。第三方同步接口的參數(shù)配置模塊用于配置同步程序所需的接口,包括數(shù)據(jù)庫連接參數(shù)(包括服務(wù)器名稱、數(shù)據(jù)庫名稱、數(shù)據(jù)庫用戶、數(shù)據(jù)庫口令等)、同步數(shù)據(jù)庫信息接口參數(shù)、集成系統(tǒng)信息接口參數(shù)等。文件模塊存放經(jīng)過參數(shù)設(shè)置生成的相應(yīng)參數(shù)配置文件、記錄上次處理的最大記錄號的文件和日志文件。X-RDB功能組件接收文件模塊傳遞過來的XML模式文檔和XML文檔,將XML模式影射為數(shù)據(jù)庫關(guān)系模式,輸出查詢語言給更新模塊進(jìn)行關(guān)系數(shù)據(jù)庫的更新、查詢、刪除和插入操作。更新模塊讀取信息更新流水表,更新相應(yīng)的圖書館數(shù)據(jù)信息,從而達(dá)到了數(shù)據(jù)更新的同步。其中基于Schema XML的第三方數(shù)據(jù)同步接口模塊是系統(tǒng)的關(guān)鍵模塊。
3.2 系統(tǒng)的實現(xiàn)
3.2.1 基于XML Schema的第三方數(shù)據(jù)同步接口的實現(xiàn)
由于接口參數(shù)是由被同步系統(tǒng)提供的,這種基于接口參數(shù)的數(shù)據(jù)同步程序,一方面能夠保持穩(wěn)定,另一方面也同樣適用于各種異構(gòu)圖書館與校園“一卡通”的數(shù)據(jù)同步情況,因為圖書館集成系統(tǒng)和校園一卡通所要求的讀者信息基本相同,因而系統(tǒng)首次使用時開發(fā)人員只需研究如何配置接口參數(shù)就行了。配置好后的參數(shù)存放在文本文件或XML文件中。例如數(shù)據(jù)庫連接參數(shù)配置可以通過圖3的界面來設(shè)定,配置完成后,形成以下形式的XML配置文件:
xml version=′1.0′encoding=′GB2312′?
進(jìn)行數(shù)據(jù)同步時,系統(tǒng)調(diào)用數(shù)據(jù)庫連接、同步數(shù)據(jù)庫信息接口、集成系統(tǒng)信息接口等參數(shù)配置文件以及最大記錄號文件來確定讀取和修改的信息。對妙思文獻(xiàn)管理系統(tǒng)等對外提供編程接口的圖書館集成系統(tǒng),系統(tǒng)根據(jù)配置文件讀取到的接口參數(shù)去獲取相關(guān)信息,并生成系統(tǒng)適用的標(biāo)準(zhǔn)SQL語句提交給服務(wù)器執(zhí)行,從而實現(xiàn)數(shù)據(jù)的更新同步。對于ILASII2.0等不向外提供編程接口的圖書館集成系統(tǒng),系統(tǒng)根據(jù)配置文件讀取到的接口參數(shù)獲取相關(guān)信息并生成指定格式的文本,然后通過ILASII2.0系統(tǒng)本身提供的“讀者定長數(shù)據(jù)接收”功能實現(xiàn)數(shù)據(jù)的同步[4]。相關(guān)代碼如下:
FunConfig()
Begin
∥讀取相關(guān)參數(shù)
StrConYkt=DataConfig(AdoStrConYkt);∥從配置文件中讀取一卡通連接的參數(shù)并返回相應(yīng)的連接字符串
StrConTsg=DataConfig(AdoStrConTsg);∥從配置文件中讀取圖書館連接的參數(shù)并返回相應(yīng)的連接字符串
StrTableLsb=GetTable(StrTableLsb);∥從配置文件中讀取同步數(shù)據(jù)庫的流水表名
StrTableYkt=GetTable(TableYkt);∥從配置文件中讀取一卡通用戶表的表名
StrTableTsg=GetTable(TableTsg);∥從配置文件中讀取讀者信息表的表名
StrFieldYkt=ReadInfo(StrFieldYkt);∥從配置文件中讀取一卡通信息接口名稱
StrFieldTsg=ReadInfo(StrFieldTsg);∥從配置文件中讀取集成系統(tǒng)信息接口名稱
if not adoconnection1.Connected then ∥連接一卡通數(shù)據(jù)庫
begin
?adoconnection1.ConnectionString:=StrConYkt;
?adoconnection1.Connected:=true;
end;
if not adoconnection2.Connected then ∥連接圖書館數(shù)據(jù)庫
begin
?adoconnection2.ConnectionString:=StrConTsg;
?adoconnection2.Connected:=true;
end;
End
∥新增讀者
Begin
FunConfig()
method:=′new′;
filename:=′newid.txt′;∥存放上次新增的最大記錄號
tablename:=StrTableYkt;
maxchangid:=readoldid(filename);∥獲取上次最后新增的記錄號
maxnewid:=readnewid(tablename,StrMaxYkt);∥一卡通當(dāng)前用戶表的最大記錄號
if maxchangid begin DataSync(maxchangid,maxnewid,method,StrTableLsb,StrTableYkt,StrTableTsg,StrFieldYkt,StrFieldTsg); end; End ∥更新相應(yīng)信息 Begin FunConfig() method:=′old′; filename:=′logservermax.txt′;∥存放上次最后修改的記錄號 tablename:=StrTableLsb; maxchangid:=readoldid(filename);∥獲取上次最后修改的記錄號 maxnewid:=readnewid(StrTableLsb,StrMaxLsb);∥更新流水表里的最大更新記錄號 if maxchangid begin DataSync(maxchangid,maxnewid,method,StrTableLsb,StrTableYkt,StrTableTsg,StrFieldYkt,StrFieldTsg); end; End ∥構(gòu)造SQL語句 SqlMadeUser(maxchangid,maxnewid,StrTableYkt,StrFieldYkt) Begin SqlSelect=strRead(StrFieldYkt,StrUser)∥獲取一卡通中用戶的信息字段名稱 SqlFrom=StrTableYkt∥獲取一卡通用戶信息表的名稱 SqlWhere=strRead(StrFieldYkt,StrMaxYkt)∥獲取一卡通用戶信息表記錄號字段名稱 strSql=SqlSelect+SqlFrom+SqlWhere between′+inttostr(maxchangid+1)+′and′+inttostr(maxnewid)+′′′; ∥這樣在實際使用中就構(gòu)造出了: ∥strSql=′select cardno,name,outid,customerid from BASEzCUSTOMERS where customerid between′+inttostr(maxchangid+1)+′and′+inttostr(maxnewid)+′′′ End 4 基于XML Schema的第三方數(shù)據(jù)同步接口應(yīng)用 4.1 開發(fā)環(huán)境 華東理工大學(xué)一卡通中心和圖書館集成系統(tǒng)數(shù)據(jù)同步系統(tǒng)中,一卡通卡中心與接口服務(wù)器之間是新開普電子技術(shù)有限公司開發(fā)的新開普第三方數(shù)據(jù)同步服務(wù),該服務(wù)程序采用Visual Studio 2005為開發(fā)工具。接口服務(wù)器與圖書館集成系統(tǒng)之間是圖書館自行開發(fā)的第三方同步服務(wù),該服務(wù)程序采用Borland Delphi 7為開發(fā)工具。服務(wù)程序與數(shù)據(jù)庫連接采用ADO(ActiveX DATA Object),它是微軟公司提出訪問任何數(shù)據(jù)源及數(shù)據(jù)庫的通用數(shù)據(jù)訪問對象,它用SQL語言代碼對數(shù)據(jù)庫及數(shù)據(jù)源進(jìn)行創(chuàng)建、插入、刪除和修收。 4.2 應(yīng)用實例和效果 基于XML Schema的第三方通用數(shù)據(jù)同步系統(tǒng)功能如圖4所示。通過該接口可以設(shè)定程序運(yùn)行時間間隔,程序提供包括用戶掛失解掛、掛失補(bǔ)證等用戶信息的同步更新,同時還可以設(shè)定讀者類別參數(shù)來自動新增讀者。在華東理工大學(xué)圖書館實際使用中,該接口被設(shè)定為開機(jī)啟動并每5分鐘執(zhí)行一次數(shù)據(jù)同步這樣每隔5分鐘系統(tǒng)對交換日志中的未處理記錄逐條循環(huán)分別處理掛失、解掛、補(bǔ)證時,首先讀交換日志獲取上次最后修改的記錄號,然后處理掛失補(bǔ)證解掛情況并根據(jù)情況類別分別記入相應(yīng)的日志文件同時在相應(yīng)的文本框中顯示出來。對于新增的校園卡用戶,接口程序首先檢測該用戶的部門代碼是否在事先所設(shè)定的單位代碼列表里,如果在列表里則檢測該用戶的卡號在讀者信息表里是否已存在。如果卡號不存在就往讀者信息表里添加一條新數(shù)據(jù),這樣該校園卡用戶就作為新讀者自動同步到圖書館系統(tǒng)里。在本校的實際應(yīng)用中相關(guān)代碼如下: begin readinlb();∥讀取讀者單位類別列表文件 for k:=0 to line-1 do begin s:=lb[k].account; 取出第k個單位未處理的新用戶信息; while not adoquery1.Eof do begin 依次讀取每個用戶相關(guān)字段信息; if讀者信息表里不存在該用戶then 插入該用戶信息入讀者信息表中; 在備注框中顯示新增讀者的信息; 在日志文件里寫新增讀者的信息; end; Next; end; end; 5 結(jié) 語 筆者通過分析各種數(shù)據(jù)同步的模式,開發(fā)出適合本校的基于第三方同步的校園“一卡通”與圖書館系統(tǒng)數(shù)據(jù)的同步程序,實現(xiàn)了不修改圖書館集成系統(tǒng)的情況下與校園“一卡通”數(shù)據(jù)的同步更新。并提出了設(shè)計基于接口參數(shù)的通用數(shù)據(jù)同步程序的設(shè)想,這種模式一方面能夠保持穩(wěn)定,另一方面也同樣適用于各種異構(gòu)圖書館與校園“一卡通”的數(shù)據(jù)同步情況,無論是接口的實現(xiàn)還是硬件設(shè)備的投入都是低成本的,具有很強(qiáng)的實用性和通用性。 參考文獻(xiàn) [1]鄧堯偉.圖書管理系統(tǒng)與校園“一卡通”接口模式研究[J].圖書館論壇,2005,(2):79-81. [2]劉偉.基于Schema的XML模式與關(guān)系模式映射算法的研究[J].計算機(jī)應(yīng)用與軟件,2006,(3):113-115. [3]吉久明,李楠.建立基于知識集成的資源和服務(wù)整合與協(xié)同機(jī)制[J].現(xiàn)代圖書情報技術(shù),2006,(9):58-62. [4]王澤賢.廣州大學(xué)圖書館與廣州大學(xué)城一卡通系統(tǒng)應(yīng)用集成的實現(xiàn)[J].現(xiàn)代圖書情報技術(shù),2007,(8):84-88.