〔摘 要〕本文分析了數(shù)字圖書館中數(shù)據(jù)存儲結(jié)構(gòu)的形式,對數(shù)字圖書館中元數(shù)據(jù)用XML語言描述進(jìn)行了探討,設(shè)計并實現(xiàn)了一個基于.NET技術(shù)實現(xiàn)數(shù)字圖書館中數(shù)據(jù)存儲結(jié)構(gòu)轉(zhuǎn)化為XML的解決方案。
〔關(guān)鍵詞〕數(shù)字圖書館;數(shù)據(jù)存儲;元數(shù)據(jù);.NET技術(shù)
DOI:10.3969/j.issn.1008-0821.2010.10.022
〔中圖分類號〕G250.76 〔文獻(xiàn)標(biāo)識碼〕B 〔文章編號〕1008-0821(2010)10-0081-05
The Implementation of Data Storage Structure
Being Converted to XML in Digital LibraryZhou Yan
(Liaoning Province Library,Shenyang 110015,China)
〔Abstract〕The paper analyzed the data storage structure in digital library,discussed the descript of mata data through the XML language,designed and implemented a management system of data storage structure being converted to XML by .NET technology in library.
〔Keywords〕digital library;data storage;meta data;.NET technology
隨著信息技術(shù)的迅猛發(fā)展,信息的種類和形式越來越豐富,存儲和傳播的信息量也越來越大,作為存儲各種類型信息載體的圖書館,為適應(yīng)新形式的需要,圖書館正不斷向自動化、電子化和數(shù)字化的方向發(fā)展。
目前,無論是在圖書館自動化建設(shè)還是在數(shù)字環(huán)境下圖書館建設(shè)中,數(shù)據(jù)交換在圖書館采訪、編目子系統(tǒng)中都占有非常重要的位置,而在圖書館數(shù)據(jù)存儲中,數(shù)據(jù)都是以MARC形式存在的,MARC格式在數(shù)據(jù)交換方面確實起了很大的作用,但在數(shù)字環(huán)境下的網(wǎng)絡(luò)時代,如果還一味的采用MARC格式進(jìn)行數(shù)據(jù)交換顯然是行不通的,這是因為現(xiàn)行的網(wǎng)絡(luò)環(huán)境是以HTML為基礎(chǔ)構(gòu)建的,由于HTML只能描述形式而不能揭示其內(nèi)容,在HTML語法框架內(nèi)要想充分表達(dá)MARC格式所描述的書目數(shù)據(jù)事實上是不可能的,由此可見,正是MARC格式割裂了圖書館與Internet網(wǎng)絡(luò)之間的聯(lián)系,成為數(shù)字環(huán)境下圖書館建設(shè)發(fā)展的瓶頸。隨著信息技術(shù)的發(fā)展,XML技術(shù)的出現(xiàn),給圖書館充分發(fā)掘館藏信息資源、在Web信息空間發(fā)揮更加重要的作用提供了一次機(jī)遇。利用XML,我們可以把任意復(fù)雜的數(shù)字化館藏對象進(jìn)行分解,然后用合適的元數(shù)據(jù)進(jìn)行描述。
1 XML與數(shù)字圖書館建設(shè)
XML全名為Extensible Markup Language, 中文譯為可擴(kuò)展標(biāo)記語言,XML制定的主要目標(biāo)是為了能在網(wǎng)絡(luò)上傳遞或處理文件信息,它是互聯(lián)網(wǎng)聯(lián)合組織(W3C)創(chuàng)建的一組規(guī)范。
XML語言具有如下特點:
(1)跨平臺存儲。XML已成為數(shù)據(jù)交換的標(biāo)準(zhǔn)格式,它具有跨平臺、跨網(wǎng)絡(luò)、跨程序語言的特征。
(2)基于內(nèi)容的格式。
(3)內(nèi)容與表示的分離。
(4)實現(xiàn)新的協(xié)議。
(5)結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。
XML在圖書館數(shù)字化建設(shè)中的應(yīng)用,具體的表現(xiàn)在以下幾個方面:
(1)用XML寫成的書目記錄,可以出版成不同的形式,即可以在瀏覽器中進(jìn)行瀏覽,也可以加入到搜索引擎中。
(2)書目記錄可以被XML及MARC交換,而數(shù)據(jù)不會損失。
(3)很多MARC被遺留的問題將變得無關(guān)緊要,包括CJK、羅馬拼音及權(quán)威控制等。
(4)利用RDF可帶多種不同元數(shù)據(jù)(包括都柏林核心數(shù)據(jù))。
(5)用于圖書館的采訪業(yè)務(wù)時,XML的結(jié)構(gòu)化文件特點可使圖書館與書商間的訂購交易工作變的很容易。
XML在數(shù)字圖書館建設(shè)中的應(yīng)用十分廣泛,由于XML具有結(jié)構(gòu)化、標(biāo)準(zhǔn)化的文件模式,因此在圖書館整理、組織與保存網(wǎng)絡(luò)信息資源時,采用XML是非常方便的;而且對于未來更精確的信息檢索,XML也能給使用者提供一個非常好的信息利用環(huán)境。
2 數(shù)字圖書館中數(shù)據(jù)存儲結(jié)構(gòu)轉(zhuǎn)換為XML的設(shè)計方案
MARC格式按照ISO2709的規(guī)則定義了圖書館中數(shù)據(jù)存儲的標(biāo)準(zhǔn),XML是WEB上數(shù)據(jù)交換的標(biāo)準(zhǔn),如何才能實現(xiàn)二者的轉(zhuǎn)換呢?本人利用微軟的.NET開發(fā)環(huán)境中的ADO.NET技術(shù)成功的將MARC格式轉(zhuǎn)換為XML格式。
2.1 《MARC轉(zhuǎn)換XML系統(tǒng)》的體系結(jié)構(gòu)
《MARC轉(zhuǎn)化為XML系統(tǒng)》的體系結(jié)構(gòu)與Web應(yīng)用的體系結(jié)構(gòu)相類似,是一個典型的三層結(jié)構(gòu),即:物理數(shù)據(jù)層、業(yè)務(wù)層和表示層(見圖1)。
圖1 系統(tǒng)體系結(jié)構(gòu)圖
在物理數(shù)據(jù)層上,《MARC轉(zhuǎn)化為XML系統(tǒng)》系統(tǒng)采用的是Microsoft公司的SQLServer 2000作為WEB數(shù)據(jù)庫。在該層上,系統(tǒng)定義了數(shù)據(jù)庫中各個表的結(jié)構(gòu)及約束關(guān)系,并在此層上實現(xiàn)數(shù)據(jù)的存儲操作。在業(yè)務(wù)層上,定義了WEB服務(wù)的操作方法。在該層上,使用WEB服務(wù)的程序可以是桌面應(yīng)用程序、瀏覽器也可以是另一個WEB服務(wù),構(gòu)筑WEB服務(wù)的主要技術(shù)有XML Schema、SOAP、WSDL和UDDI,它們都是完全基于新一代Internet種子技術(shù)XML的。在表示層上,《MARC轉(zhuǎn)化為XML系統(tǒng)》系統(tǒng)采用瀏覽器(Brower)作為依托。該系統(tǒng)的開發(fā)語言采用Microsoft公司的Visual Studio.NET中的VB.NET進(jìn)行系統(tǒng)的總體開發(fā)工作。
在《MARC轉(zhuǎn)化為XML系統(tǒng)》設(shè)計中,由于原始數(shù)據(jù)是以文本形式存儲在客戶端機(jī)器上的,根據(jù)實際需要,因此在設(shè)計上可分為3個步驟:
第一步,利用VFP6.0將MARC轉(zhuǎn)換為數(shù)據(jù)庫形式,并生遷到SQLServer數(shù)據(jù)庫中。
第二步,利用.NET中的ADO.NET技術(shù),將SQL Server中數(shù)據(jù)庫的內(nèi)容轉(zhuǎn)換為XML形式。
第三步,在WEB上進(jìn)行數(shù)據(jù)的瀏覽,將XML數(shù)據(jù)在Internet上展示出來。
2.2 《MARC轉(zhuǎn)換XML系統(tǒng)》的數(shù)據(jù)庫設(shè)計
《MARC轉(zhuǎn)化為XML系統(tǒng)》的數(shù)據(jù)庫由SQL Server數(shù)據(jù)庫中的marcdb數(shù)據(jù)庫和VFP6.0中的marc數(shù)據(jù)庫組成。marcdb數(shù)據(jù)庫由表marcdb組成,而marc數(shù)據(jù)庫由bookdb表、dictdb表、temp表組成。
各個表的結(jié)構(gòu)如下:
(1)bookdb表,用于記錄marc轉(zhuǎn)換為數(shù)據(jù)庫格式的信息,見表1:
(2)dictdb表(數(shù)據(jù)字典):
(3)photodb表,該表的作用為用于將MARC轉(zhuǎn)換為數(shù)據(jù)庫形式后進(jìn)行存儲的表,photodb表的結(jié)構(gòu)見表3。
(4)temp表,主要存儲MARC轉(zhuǎn)換為數(shù)據(jù)庫時的臨時數(shù)據(jù)。
2.3 生成XML模塊的設(shè)計
生成XML文檔模塊由數(shù)據(jù)瀏覽、數(shù)據(jù)查詢、XML文檔生成3個模塊組成,目的是將SQLServer2000中的marcdb數(shù)據(jù)庫內(nèi)容按照需求轉(zhuǎn)換為XML文檔形式。以生成XML模塊為例:
Public Class XML數(shù)據(jù)
Imports System.Data
Imports System.Data.SqlClient
Imports System.xml
Public class DataView
Me.SqlDataAdapter1.InsertCommand=Me.SqlInsertCommand1
Me.SqlDataAdapter1.SelectCommand=Me.SqlSelectCommand1
Me.SqlDataAdapter1.TableMappings.AddRange(New
System.Data.Common.DataTableMapping() {New
System.Data.Common.DataTableMapping(″Table″,″marcdb″,New
System.Data.Common.DataColumnMapping() {New
System.Data.Common.DataColumnMapping(″id″,″id″),New
System.Data.Common.DataColumnMapping(″bookname″,″bookname″),New
System.Data.Common.DataColumnMapping(″publisher″,″publisher″),New
System.Data.Common.DataColumnMapping(″subject″,″subject″),New
System.Data.Common.DataColumnMapping(″guanchang″,″guanchang″),New
System.Data.Common.DataColumnMapping(″laiyuan″,″laiyuan″)})})
3 《MARC轉(zhuǎn)化為XML系統(tǒng)》的實現(xiàn)
根據(jù)數(shù)據(jù)轉(zhuǎn)換的實際需求,在客戶端先將MARC格式轉(zhuǎn)換為數(shù)據(jù)庫形式,然后上傳到服務(wù)器,在服務(wù)器端進(jìn)行XML的轉(zhuǎn)換工作。
3.1 生成XML模塊的實現(xiàn)
程序執(zhí)行步驟:
(1)根據(jù)數(shù)據(jù)字典的字段構(gòu)造選擇命令和更改命令。
(2)構(gòu)造DataAdapter的實例,選擇結(jié)果放到DataSet中。
(3)將DataSet中的內(nèi)容轉(zhuǎn)換為XML文檔。
Private Sub Button6Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button6.Click
Friend WithEvents OleDbDataAdapter1 As System.Data.OleDb.OleDbDataAdapter
Friend WithEvents OleDbSelectCommand1 As System.Data.OleDb.OleDbCommand
Friend WithEvents OleDbInsertCommand1 As System.Data.OleDb.OleDbCommand
Friend WithEvents DataSet11 As WindowsApplication2.DataSet1
Friend WithEvents Button5 As System.Windows.Forms.Button
Friend WithEvents SqlDataAdapter1 As System.Data.SqlClient.SqlDataAdapter
Friend WithEvents SqlSelectCommand1 As System.Data.SqlClient.SqlCommand
Friend WithEvents SqlInsertCommand1 As System.Data.SqlClient.SqlCommand
Friend WithEvents SqlConnection1 As System.Data.SqlClient.SqlConnection
mycnn=New ADODB.Connection()
myrs=New ADODB.Recordset()
mycmd=New ADODB.Command()
mycnn.ConnectionString=″driver={SQL SERVER};server=net6;;″
mycnn.Mode=ADODB.ConnectModeEnum.adModeShareExclusive
mycnn.Open()
mycnn.DefaultDatabase=″marcdb″
myrs.Open(″select*from marcdb″,mycnn,ADODB.CursorTypeEnum.adOpenStatic,ADODB.LockTypeEnum.adLockOptimistic)
SqlDataAdapter1.Fill(DataSet11)
DataSet11.WriteXml(″c:\\\\marcdb.xml″,XmlWriteMode.WriteSchema)
MsgBox(″XML文檔生成完畢″,MsgBoxStyle.OKOnly,″XML數(shù)據(jù)瀏覽″)
End sub
生成后的XML文檔如下:
-
3.2 數(shù)據(jù)瀏覽模塊的實現(xiàn)
該模塊的作用是將客戶端轉(zhuǎn)換后的MARC以數(shù)據(jù)庫形式進(jìn)行瀏覽,服務(wù)器端數(shù)據(jù)庫采用SQL Server數(shù)據(jù)庫進(jìn)行存儲。
圖2 數(shù)據(jù)瀏覽模塊邏輯圖
Private Sub 數(shù)據(jù)瀏覽Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles 數(shù)據(jù)瀏覽.Click
mycnn=New ADODB.Connection()
myrs=New ADODB.Recordset()
mycmd=New ADODB.Command()
mycnn.ConnectionString=″driver={SQL SERVER};server=net6;;″
mycnn.Mode=ADODB.ConnectModeEnum.adModeShareExclusive
mycnn.Open()
mycnn.DefaultDatabase=″marcdb″
myrs.Open(″select*from marcdb″,mycnn,ADODB.CursorTypeEnum.adOpenStatic,ADODB.LockTypeEnum.adLockOptimistic)
If myrs.RecordCount>0 Then myrs.MoveFirst()
record.Text=myrs.Fields(0).Value bookname.Text=myrs.Fields(1).Value
publisher.Text=myrs.Fields(2).Value subject.Text=myrs.Fields(3).Value
guanchang.Text=myrs.Fields(4).Value laiyuan.Text=myrs.Fields(5).Value
End If
End Sub
3.3 數(shù)據(jù)查詢模塊的實現(xiàn)
該模塊的作用是將客戶端轉(zhuǎn)換后的MARC以數(shù)據(jù)庫形式進(jìn)行查詢,服務(wù)器端數(shù)據(jù)庫采用SQL Server數(shù)據(jù)庫進(jìn)行存儲。
圖3 查詢功能模塊的邏輯圖
Private Sub 數(shù)據(jù)查詢Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles 數(shù)據(jù)查詢.Click
mycnn=New ADODB.Connection()
myrs=New ADODB.Recordset()
mycmd=New ADODB.Command()
mycnn.ConnectionString=″driver={SQL SERVER};server=net6;;″
mycnn.Mode=ADODB.ConnectModeEnum.adModeShareExclusive
mycnn.Open()
mycnn.DefaultDatabase=″marcdb″
Dim dbstr As String
dbstr=″select*from marcdb where bookname like″+Space(1)+″’%″+bookname.Text+″%″+″’″
myrs.Open(″select*from marcdb where bookname like″+Space(1)+″’%″+bookname.Text+″%″+″’″,mycnn,ADODB.CursorTypeEnum.adOpenStatic,ADODB.LockTypeEnum.adLockOptimistic)
If myrs.RecordCount>0 Then
myrs.MoveFirst()
record.Text=myrs.Fields(0).Value
bookname.Text=myrs.Fields(1).Value
publisher.Text=myrs.Fields(2).Value
subject.Text=myrs.Fields(3).Value
guanchang.Text=myrs.Fields(4).Value
laiyuan.Text=myrs.Fields(5).Value
Else
System.Windows.Forms.MessageBox.Show(″沒有您要檢索的信息″)
End If
3.4 客戶端MARC數(shù)據(jù)的轉(zhuǎn)化模塊實現(xiàn)
客戶端MARC數(shù)據(jù)的轉(zhuǎn)化模塊的實現(xiàn)采用VFP6.0進(jìn)行轉(zhuǎn)換,利用數(shù)據(jù)字典,將MARC格式的數(shù)據(jù)轉(zhuǎn)換為數(shù)據(jù)庫形式。分兩步進(jìn)行:
(1)將原始MARC數(shù)據(jù)轉(zhuǎn)換為中間數(shù)據(jù)庫。
(2)將中間數(shù)據(jù)庫按照數(shù)據(jù)字典格式,轉(zhuǎn)換成數(shù)據(jù)庫。
(3)將VFP6.0數(shù)據(jù)庫升遷至SQL Server數(shù)據(jù)庫。
下面的數(shù)據(jù)為一條標(biāo)準(zhǔn)的MARC格式數(shù)據(jù):
00532nam000000181200450000100110000010100080001120000250
00192050017000442100039000612150025001003810037001255400
01300162541001900175610007400194701002100268905002700289
920003400316-7399000574-0 ajpn-1 a奉天春日町附近b照片-a照片(稿本)-a奉天[沈陽]c田頭良助d1940年6月4日-a1幅c黑白d3.7x2.5cm-1 a滿洲攝影印畫b日文c田頭良助g頁-1 a市街雜景-1 a奉天春日町附近-0 a春日町a(chǎn)東北a奉天a建筑a1940年6月a鳥籠子a市街a人力車a沈陽a文元-04攝a田頭良助e日-a遼寧省博物館cL5 13668-1 aMH0T\\MH0001b滿洲攝影印畫0001-
在Command1click中鍵入:
getmarc
str=substr(marec,13,5)
a=int(val(str))
n=int((a-25)/12)
i=0
do while i i=i+1 t=substr(marec,24+(i-1)*12+1,3) lstr=substr(marec,24+(i-1)*12+4,4) b=val(lstr) cstr=substr(marec,24+(i-1)*12+8,5) s=val(cstr) fld=substr(marec,b+s+1,k) a=len(dfld) sele temp appe blan repl mtag with t,fldid with substr(fld,1,1),onefld with substr(fld,3,a-2),recorno with j enddo ?″轉(zhuǎn)換完畢!!″ 在Command2click中鍵入: do while.not.eof() dmarctag=marctag temp=onefld sele 1 loca for marctag=dmarctag do while.Not.eof() sele 1 nfldname=fldname nsubid=marcsubid startpos=at(chr(31)+msubid,temp) if startpos>0 i=startpos+2 do while substr(temp,i,1)<>chr(30).and.substr(temp,i,1)<>chr(31) i=i+1 enddo tempfld=substr(templine,startpos+2,i-startpos-2) sele bookdb repl mfldname with tempfld endif select dictdb continue enddo (4)利用VFP6.0中的升遷向?qū)?,將VFP6.0數(shù)據(jù)庫升遷至SQL Server數(shù)據(jù)庫。 以上就是在數(shù)字環(huán)境下,圖書館存儲結(jié)構(gòu)向XML轉(zhuǎn)換的解決方案的實現(xiàn)過程,所有代碼都已經(jīng)通過測試。 4 結(jié)束語 21世紀(jì)人類已經(jīng)進(jìn)入了高科技知識經(jīng)濟(jì)時代,數(shù)字環(huán)境下,圖書館的信息存儲形式也要跟上時代的發(fā)展,作為圖書館人,我們正為之而努力著,推動圖書館數(shù)字化建設(shè)不斷向前發(fā)展。 參考文獻(xiàn) [1]Chen,Ching-chih.“NII,GII,I2 and IT 2 Initiatives:Implications to the digital Library Development in the US.”In IT and Global Digtial Library Development,edited by Ching-chih chen. Newton,MA,USA:MicroUse Information,1999:49-64. [2]Detourzo Michael.What Will ffe:How the New World of Information Will Change.Lth:Harper Pklge,2007. [3]Duffy,Carolyn.Is the Internet Shrinking?Nonsense!.NetworkWorld,2002,(19). [4]郭瑞華.圖書館信息資源整合及元數(shù)據(jù)應(yīng)用[J].圖書情報工作,2006,(10):101-102. [5]鎮(zhèn)錫惠.數(shù)字圖書館主要技術(shù)需求[J].國家圖書館學(xué)刊,2000,(3):21-23. [6](美)Steven Holzner.XML使用詳解[M].北京:機(jī)械工業(yè)出版社,1999.1. [7](美)Sanjeev Rohilla Senthil Nathan Surbbi.ADO.NET專業(yè)項目實例開發(fā)[M].中國水利水電出版社,2003.1. [8](美)Evangelos Petroutsos,Asli Bilgin.Visual Basic.NET數(shù)據(jù)庫編程從入門到精通[M].邱仲潘,等譯.北京:電子工業(yè)出版社,2002.8. [9]胡海璐,等.XML Web Services高級編程范例[M].北京:電子工業(yè)出版社,2003.2.