〔摘 要〕隨著數(shù)字圖書館的深入應(yīng)用,在圖書館信息管理中出現(xiàn)了關(guān)系型數(shù)據(jù)和文檔型數(shù)據(jù)等多種數(shù)據(jù)類型,不同類型之間的數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)共享成為數(shù)字圖書館建設(shè)的關(guān)鍵。針對(duì)此問(wèn)題,本文從幾個(gè)方面對(duì)文檔數(shù)據(jù)庫(kù)與關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行了比較,提出了基于Microsoft的開放數(shù)據(jù)庫(kù)連接(ODBC)技術(shù)、使用Lotus腳本語(yǔ)言實(shí)現(xiàn)關(guān)系型數(shù)據(jù)與文檔型數(shù)據(jù)間的相互轉(zhuǎn)換的基本思路和具體解決方法。
〔關(guān)鍵詞〕數(shù)據(jù)轉(zhuǎn)換;異構(gòu)數(shù)據(jù);關(guān)系型數(shù)據(jù);文檔型數(shù)據(jù);Lotus腳本語(yǔ)言
〔中圖分類號(hào)〕G250.76 〔文獻(xiàn)標(biāo)識(shí)碼〕A 〔文章編號(hào)〕1008-0821(2009)09-0111-03
Application of Heterogeneous Data Conversion in Digital Library ConstructionZhu Xiaoyan
(Library,Wuhan University,Wuhan 430072,China)
〔Abstract〕There are many data types such as relationship data and document data in the library information management along with the application of digital library construction.It is the key to the data conversion and data share of different data types.A comparison is made between document database and RDB.The ODBC technology was analyzed based on Microsoft.The method and examples were analyzed to solve the data conversion between relationship database and document database using lotus script language.
〔Key words〕database conversion;heterogeneous data;ODBC;relationship data;document data;LotusScript language
2006年,武漢大學(xué)推廣學(xué)校儀器設(shè)備管理信息系統(tǒng),利用校園網(wǎng)對(duì)全校設(shè)備進(jìn)行管理。但學(xué)校的設(shè)備管理系統(tǒng),只涉及到圖書館這個(gè)層面,只牽涉到設(shè)備在學(xué)校各院系,實(shí)驗(yàn)室,財(cái)務(wù)部,國(guó)有資產(chǎn)辦公室等學(xué)校職能部門的流轉(zhuǎn),整個(gè)圖書館只有一個(gè)客戶端;對(duì)設(shè)備到達(dá)圖書館后,在圖書館內(nèi)部4個(gè)分館及院系資料室是怎樣分配,調(diào)拔,怎樣動(dòng)態(tài)的流轉(zhuǎn),并沒(méi)有一個(gè)管理的端口。針對(duì)學(xué)校設(shè)備管理系統(tǒng)的不足,武漢大學(xué)圖書館在圖書館辦公自動(dòng)化平臺(tái)上開發(fā)了設(shè)備管理模塊,實(shí)施設(shè)備一級(jí)財(cái)產(chǎn)賬和二級(jí)使用賬分開管理的體制。學(xué)校的設(shè)備管理系統(tǒng)開發(fā)工具是sql server 2000關(guān)系數(shù)據(jù)庫(kù),而圖書館的設(shè)備管理系統(tǒng)的開發(fā)工具是Domino的文檔數(shù)據(jù)庫(kù)。如何將學(xué)校的設(shè)備數(shù)據(jù)導(dǎo)出,再直接導(dǎo)入圖書館設(shè)備管理系統(tǒng),作為一級(jí)財(cái)產(chǎn)賬,避免數(shù)據(jù)重復(fù)錄入的工作;或者將Domino的文檔數(shù)據(jù)庫(kù)轉(zhuǎn)換成關(guān)系數(shù)據(jù)庫(kù),利用關(guān)系數(shù)據(jù)庫(kù)強(qiáng)大的報(bào)表統(tǒng)計(jì)分析和復(fù)雜的計(jì)算功能,將具有現(xiàn)實(shí)的意義。本文將對(duì)不同類型的數(shù)據(jù)轉(zhuǎn)換作一探討。
1 基本原理及思路
1.1 ODBC概述
ODBC是一種用來(lái)在相關(guān)或不相關(guān)的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)中存取數(shù)據(jù)的,是用C語(yǔ)言實(shí)現(xiàn)的標(biāo)準(zhǔn)應(yīng)用程序數(shù)據(jù)接口。通過(guò)ODBCAPI,應(yīng)用程序可以存取保存在多種不同數(shù)據(jù)庫(kù)管理系統(tǒng)中的數(shù)據(jù),而不論每個(gè)DBMS使用了何種數(shù)據(jù)存儲(chǔ)格式和編程接口。ODBC的結(jié)構(gòu)包括4個(gè)主要部分:
(1)應(yīng)用程序接口:屏蔽不同的ODBC數(shù)據(jù)庫(kù)驅(qū)動(dòng)器之間函數(shù)調(diào)用的差別,提供統(tǒng)一的SQL編程接口。
(2)驅(qū)動(dòng)器管理器:為應(yīng)用程序裝載數(shù)據(jù)庫(kù)驅(qū)動(dòng)器。
(3)數(shù)據(jù)庫(kù)驅(qū)動(dòng)器:實(shí)現(xiàn)ODBC的函數(shù)調(diào)用,提供對(duì)特定數(shù)據(jù)源的SQL請(qǐng)求。
(4)數(shù)據(jù)源:由想要存取的數(shù)據(jù)以及與其相關(guān)的操作系統(tǒng)、DBMS和用于訪問(wèn)DBMS的網(wǎng)絡(luò)平臺(tái)組成。
1.2 Lotus Domino/Note編程語(yǔ)言介紹
Lotus Domino/Note主要運(yùn)用兩種基本開發(fā)語(yǔ)言(LotusScript編程語(yǔ)言與Notes公式語(yǔ)言)進(jìn)行開發(fā),并結(jié)合Lotus Domino/Note支持的Java和JavaScript編程語(yǔ)言。使用LotusScript編程語(yǔ)言書寫Scripts,使用Notes的公式語(yǔ)言書寫公式(即使用函數(shù)和命令)。LotusScript在Notes中運(yùn)行能夠提供如下功能:
(1)LotusScript是一種程序語(yǔ)言,允許開發(fā)與C或C++兼容的應(yīng)用軟件。
(2)LotusScript允許執(zhí)行反復(fù)(循環(huán)),允許創(chuàng)建用戶定義的數(shù)據(jù)類型,允許控制超出公式語(yǔ)言能力的程序流程。
(3)LotusScript經(jīng)由面向?qū)ο筇峁┰L問(wèn)Notes用戶界面和Notes NSF文件(文檔庫(kù))的程序。
類是一種在現(xiàn)實(shí)對(duì)象模型化的數(shù)據(jù)類型,包括代表對(duì)象的數(shù)據(jù)和操作對(duì)象屬性的子程序。一個(gè)Notes應(yīng)用軟件由一個(gè)或更多的數(shù)據(jù)庫(kù)組成,每個(gè)數(shù)據(jù)庫(kù)由視圖、文檔、域等組成。Notes包含一套預(yù)先定義了的類,這些類對(duì)應(yīng)于數(shù)據(jù)元素。圖1展示了一個(gè)對(duì)Domino文檔數(shù)據(jù)庫(kù)操作的流程示意圖。
Lotus Notes為了方便與其他程序進(jìn)行數(shù)據(jù)接口,提供了一套專門的擴(kuò)展類庫(kù),即LotusScript Data Object(LS:DO),它是由ODBCConnection,ODBCQuery,ODBCResultSet三個(gè)類組成的一個(gè)集合,提供對(duì)外部的ODBC數(shù)據(jù)的完全讀、寫訪問(wèn)。它們提供了通過(guò)ODBC Version2.0標(biāo)準(zhǔn)訪問(wèn)和更新外部數(shù)據(jù)庫(kù)中的表的屬性和成員函數(shù)。
ODBCConnection類:表示連接到數(shù)據(jù)源的ODBC數(shù)據(jù)存取特性。
OCBCQuery類:表示定義一個(gè)SQL語(yǔ)句的ODBC數(shù)據(jù)存取特性。
ODBCResultSet類:表示在結(jié)果集合上執(zhí)行操作的ODBC數(shù)據(jù)存取特性。
1.3 Domino文檔數(shù)據(jù)庫(kù)和關(guān)系數(shù)據(jù)庫(kù)的區(qū)別
Domino文檔數(shù)據(jù)庫(kù)是一個(gè)集數(shù)據(jù)與設(shè)計(jì)元素于一身的集合體,它的應(yīng)用程序就是數(shù)據(jù)庫(kù),和關(guān)系型數(shù)據(jù)庫(kù)不一樣,它不存在一個(gè)不可見的與用戶界面完全分離的“后臺(tái)”。在本文深入展開時(shí),需要區(qū)別文檔數(shù)據(jù)庫(kù)與關(guān)系數(shù)據(jù)庫(kù)以下幾個(gè)概念的不同:
1.3.1 結(jié)構(gòu)
關(guān)系數(shù)據(jù)庫(kù)是以二維表格及其關(guān)系作為數(shù)據(jù)模型,表的每個(gè)行稱為一條記錄,每一個(gè)列稱為一個(gè)屬性(或字段),所有屬性名稱構(gòu)成的集合稱為關(guān)系模式。而Domino文檔數(shù)據(jù)庫(kù)的基本元素就是文檔。這里的文檔和關(guān)系數(shù)據(jù)庫(kù)中的記錄相似。Notes文檔的結(jié)構(gòu)是由表單(form)定義的,而表單由一組各式各樣的字段域組成。域用于收集數(shù)據(jù),域的域類型定義了此域能接受的信息類型,例如:文本、數(shù)字、日期或姓名等。在文檔型數(shù)據(jù)庫(kù)中域的概念與關(guān)系型數(shù)據(jù)庫(kù)中的字段(Field)相類似。
1.3.2 視圖
在關(guān)系型數(shù)據(jù)庫(kù)和文檔型數(shù)據(jù)庫(kù)中,均有視圖的概念。在關(guān)系型數(shù)據(jù)庫(kù)中,視圖是指從一個(gè)或幾個(gè)基本表(或視圖)導(dǎo)出的表。視圖和基本表不同,視圖是一個(gè)虛表,即視圖所對(duì)應(yīng)的數(shù)據(jù)不實(shí)際存儲(chǔ)在數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)中只存儲(chǔ)視圖的定義(存在數(shù)據(jù)字典中)。在文檔型數(shù)據(jù)庫(kù)中,視圖是文檔的排序或分類列表。視圖是對(duì)存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行訪問(wèn)的入口。用戶通過(guò)Notes預(yù)定義視圖瀏覽文檔內(nèi)容。通過(guò)視圖,用戶可以從中看到關(guān)于文檔的概要信息、文檔的狀態(tài)、文檔的關(guān)鍵域,并可按某一準(zhǔn)則對(duì)顯示的信息進(jìn)行分類和排序。Notes數(shù)據(jù)庫(kù)通過(guò)預(yù)定義的視圖查詢數(shù)據(jù),而關(guān)系型數(shù)據(jù)庫(kù)通過(guò)在線查詢查找數(shù)據(jù)。實(shí)質(zhì)上,二者邏輯上非常相似,即視圖所對(duì)應(yīng)的數(shù)據(jù)均不實(shí)際存儲(chǔ)在數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)中只存儲(chǔ)視圖的定義。
1.3.3 條目和屬性
在關(guān)系型數(shù)據(jù)庫(kù)中,有屬性(Attribute)的概念,即二維表中的每一列稱為一個(gè)屬性,給每一列起一個(gè)名稱即屬性名。而在文檔型數(shù)據(jù)庫(kù)中,就沒(méi)有“屬性”,文檔擁有的是條目(Item),條目是指存儲(chǔ)于文檔中的任意數(shù)據(jù)部分。每一個(gè)條目代表文檔中一段數(shù)據(jù),在用戶界面中,是通過(guò)表單中的域來(lái)顯示文檔中的條目的。二者雖命名不同,但從“屬性”的角度更容易理解文檔型數(shù)據(jù)庫(kù)中條目的意義。
2 數(shù)據(jù)轉(zhuǎn)換實(shí)例
2.1 實(shí)現(xiàn)關(guān)系數(shù)據(jù)向文檔數(shù)據(jù)轉(zhuǎn)換的實(shí)例
本文以圖書館設(shè)備管理模塊為例。學(xué)校的設(shè)備管理信息系統(tǒng)采用SQL SERVER 2000數(shù)據(jù)庫(kù),數(shù)據(jù)具有封裝性,各客戶端無(wú)權(quán)對(duì)SQL SERVER 2000數(shù)據(jù)庫(kù)操作,但有一個(gè)接口程序,可以將設(shè)備數(shù)據(jù)導(dǎo)出為EXCEL格式,存儲(chǔ)在本地。圖書館對(duì)存在本地的EXCEL數(shù)據(jù),進(jìn)行各種預(yù)處理,再導(dǎo)入到圖書館設(shè)備管理模塊的文檔數(shù)據(jù)庫(kù)中。具體操作步驟如下:
(1)調(diào)整存儲(chǔ)在本地EXCEL設(shè)備數(shù)據(jù)各列的排序,剔除沒(méi)有意義的列。本例中,在EXCEL工作簿中數(shù)據(jù)各列排序如表1(阿拉伯?dāng)?shù)字表示是第幾列):
(2)在辦公自動(dòng)化系統(tǒng)中,建立欲導(dǎo)入數(shù)據(jù)的“分館驗(yàn)收設(shè)備”視圖,確保此視圖每一列表示的數(shù)據(jù)與EXCEL每一列表示的數(shù)據(jù),意義相同;并且列排序的順序相同。
(3)在對(duì)比EXCEL數(shù)據(jù)列排序與辦公自動(dòng)化設(shè)備管理模塊“分館驗(yàn)收設(shè)備”視圖列排序一致后,刪除EXCEL設(shè)備數(shù)據(jù)列標(biāo)題,并將EXCEL數(shù)據(jù)另存了為WK4(1-2-3)格式。
(4)回到LOTUS瀏覽器客戶端,選擇“文件”菜單,“引入”操作。彈出窗口如圖2:
(5)選擇欲引入數(shù)據(jù)的表單,本例中為“儀器設(shè)備登記卡表單”,并勾選參數(shù)Main Document(要?jiǎng)?chuàng)建答復(fù)文檔則勾選Response Document);View Defined;Calculate fields on form during document import(選擇“文件引入時(shí)計(jì)算表單中的域”)。
(6)點(diǎn)擊“OK”按鈕,數(shù)據(jù)自動(dòng)從EXCEL工作簿導(dǎo)入到DOMINO文檔數(shù)據(jù)庫(kù)“分館驗(yàn)收設(shè)備”視圖。
2.2 文檔數(shù)據(jù)庫(kù)向關(guān)系數(shù)據(jù)庫(kù)轉(zhuǎn)換實(shí)例
文檔數(shù)據(jù)庫(kù)擅長(zhǎng)于事務(wù)管理,而在報(bào)表分析,數(shù)據(jù)統(tǒng)計(jì)方面相對(duì)薄弱,而這恰是EXCEL程序優(yōu)勢(shì),下面將展示將文檔數(shù)據(jù)庫(kù)轉(zhuǎn)換為EXCEL數(shù)據(jù)的實(shí)例。本例仍以圖書館設(shè)備管理模塊為例。步驟如下:
(1)在文檔數(shù)據(jù)庫(kù)視圖里,勾選要導(dǎo)出為EXCEL數(shù)據(jù)的文檔。
(2)編輯文檔數(shù)據(jù)庫(kù)視圖,創(chuàng)建操作按鈕“導(dǎo)出數(shù)據(jù)”,并編寫后端lotus script程序代碼。程序的流程如圖3所示:
(3)在文檔數(shù)據(jù)庫(kù)視圖里,單擊操作按鈕“導(dǎo)出數(shù)據(jù)”,程序響應(yīng)對(duì)象事件,開啟一個(gè)EXCEL工作表窗口。文檔數(shù)據(jù)庫(kù)中每一個(gè)已勾選的文檔將變?yōu)镋XCEL工作表中的一個(gè)行,每一個(gè)域?qū)⒆優(yōu)楣ぷ鞅碇械囊粋€(gè)列,原始域內(nèi)容變?yōu)閱卧獌?nèi)容,列標(biāo)題變?yōu)楣ぷ鞅碇械臉?biāo)簽。從而實(shí)現(xiàn)文檔數(shù)據(jù)導(dǎo)出到EXCEL程序中,再可以導(dǎo)入到SQL SERVER 2000等關(guān)系型數(shù)據(jù)庫(kù)中。
取值賦值,程序循環(huán)嵌套的核心代碼如下:
Do While Not(doc Is Nothing)
′設(shè)定循環(huán)數(shù)為列數(shù)
For x=0 To Ubound(view.columns)
If view.columns(x).IsHidden=False Then
If view.columns(x).title<>″″Then
fieldname=view.columns(x).itemname
Set fitem=doc.getfirstitem(fieldname)
′循環(huán)取文檔條目值,賦值給EXCEL單元格
xlsheet.cells(rows,cols).value=fitem.text
cols=cols+1
End If
End If
Next
rows=rows+1
cols=1
Set doc=dc.getnextdocument(doc)
Loop
3 結(jié) 語(yǔ)
武漢大學(xué)圖書館設(shè)備管理模塊實(shí)行二級(jí)賬管理體制。用戶角色為1個(gè)總館設(shè)備干事和4個(gè)分館、4個(gè)院系資料室設(shè)備干事。
前者管理設(shè)備財(cái)產(chǎn)賬(即設(shè)備卡上基本信息的管理),后者管理設(shè)備使用賬(即設(shè)備在圖書館內(nèi)部的調(diào)拔,維修,報(bào)廢等二級(jí)賬)。借助本文的數(shù)據(jù)轉(zhuǎn)換實(shí)例,武漢大學(xué)圖書館的一級(jí)財(cái)產(chǎn)賬與學(xué)校儀器信息管理系統(tǒng)保持了一致,同時(shí)圖書館內(nèi)部又可以從圖書館設(shè)備管理模塊導(dǎo)出數(shù)據(jù),存儲(chǔ)為EXCEL格式,以滿足本地特殊的查詢需求。異構(gòu)數(shù)據(jù)轉(zhuǎn)換為不同的信息管理平臺(tái)建立了一個(gè)溝通的橋梁。
參考文獻(xiàn)
[1]朱曉燕,黃勇凱.基于Lotus Domino/Notes的圖書館設(shè)備管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代圖書情報(bào)技術(shù),2007,(4):83-86.
[2]王秀英,李平,趙麗華.實(shí)現(xiàn)關(guān)系型與文檔型數(shù)據(jù)間的轉(zhuǎn)換[J].計(jì)算機(jī)工程與設(shè)計(jì),2005,(11):2955-2957.
[3]鄭翔.LotusScript與Formula應(yīng)用手冊(cè)[M].北京:機(jī)械工業(yè)出版社,2001:409-437.
[4]查爾斯?菲迪.Domino Developers Reference開發(fā)人員手冊(cè)[M].北京:希望電子出版社,2000:33-71.
[5]楊應(yīng)全,趙計(jì)梅,陳強(qiáng).圖書館Oracle服務(wù)器與Excel之間數(shù)據(jù)轉(zhuǎn)換應(yīng)用探討[J].現(xiàn)代情報(bào),2008,(5):147-148.