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