[摘 要]本文主要介紹利用.net平臺(tái)和C#語言,基于Web服務(wù)技術(shù),實(shí)現(xiàn)統(tǒng)一檢索系統(tǒng)的方法。基于Web服務(wù)的統(tǒng)一檢索系統(tǒng)實(shí)現(xiàn)簡單,時(shí)空性能好,可擴(kuò)展性強(qiáng),能兼顧各數(shù)據(jù)源的特點(diǎn)實(shí)現(xiàn)全局優(yōu)化。
[關(guān)鍵詞]統(tǒng)一檢索;Web服務(wù);數(shù)字圖書館
DOI:10.3969/j.issn.1008-0821.2010.07.028
[中圖分類號(hào)]G250.76 [文獻(xiàn)標(biāo)識(shí)碼]B [文章編號(hào)]1008-0821(2010)07-0099-04
Implementation of Digital Library Unified SearchLi Weifeng
(Library,Jiangsu Teachers University of Technology,Changzhou 213001,China)
[Abstract]This article described a design for unified search system based on Web service and an implementation based on.net and c#.Based on this design,unified search system could be implemented easily with good spatio-temporal performance.
[Keywords]unified search;web service;digital library
數(shù)字圖書館的數(shù)字資源越來越豐富,各數(shù)字資源的檢索相對(duì)獨(dú)立,使得檢索相對(duì)來說越來越復(fù)雜,如何屏蔽各數(shù)字資源平臺(tái),系統(tǒng)環(huán)境,內(nèi)部數(shù)據(jù)結(jié)構(gòu)等方面的差異,對(duì)統(tǒng)一的數(shù)據(jù)模式進(jìn)行描述,進(jìn)行無縫連接,進(jìn)行統(tǒng)一檢索,是數(shù)字圖書館發(fā)展中需要解決的一個(gè)重要問題。
本文通過Web服務(wù)技術(shù)把數(shù)字圖書館各個(gè)數(shù)字資源進(jìn)行包裝,并發(fā)布相應(yīng)的Web服務(wù);用戶在統(tǒng)一檢索界面發(fā)布檢索請(qǐng)求后,將用戶請(qǐng)求分析后分解成功能子查詢,并包裝為SOAP消息,調(diào)用相應(yīng)的Web服務(wù);Web服務(wù)執(zhí)行具體查詢?nèi)蝿?wù),并返回結(jié)果;查詢結(jié)果集成器分析查詢得到的各個(gè)XML文檔并組合成統(tǒng)一的查詢結(jié)果,用戶界面把最終結(jié)果展示給用戶。
1 統(tǒng)一檢索系統(tǒng)體系結(jié)構(gòu)
統(tǒng)一檢索系統(tǒng)采用B/S架構(gòu)實(shí)施,能夠靈活集成Web服務(wù)。用戶可以在一個(gè)統(tǒng)一的查詢界面輸入查詢請(qǐng)求,得到集成數(shù)據(jù)源的信息,返回結(jié)果也在同一界面上顯示。
利用層次結(jié)構(gòu)模型來描述統(tǒng)一檢索體系結(jié)構(gòu),主要包括客戶界面層、中間層、服務(wù)層和數(shù)據(jù)層4個(gè)層次,如圖1所示。圖1 統(tǒng)一檢索體系結(jié)構(gòu)2 .NET中服務(wù)層Web服務(wù)的實(shí)現(xiàn)
我們圖書館中目前本地資源主要有匯文圖書數(shù)據(jù)庫(ORACLE數(shù)據(jù)庫),超星數(shù)字圖書館(SQL SERVER數(shù)據(jù)庫)、書生之家(SQL SERVER數(shù)據(jù)庫)和自建數(shù)據(jù)庫(SQL SERVER數(shù)據(jù)庫)等。下面以工藝美術(shù)自建數(shù)據(jù)庫的Web服務(wù)實(shí)現(xiàn)為例進(jìn)行說明。
2.1 .NET中工藝美術(shù)自建數(shù)據(jù)庫Web服務(wù)的創(chuàng)建
下面簡要介紹在Microsoft的Visual Studio.net 2005的平臺(tái)下自建數(shù)據(jù)庫建立Web服務(wù)的步驟:
在起始頁創(chuàng)建網(wǎng)站中選擇ASP.NET Web服務(wù),工具自動(dòng)產(chǎn)生默認(rèn)的Web服務(wù),名為Service,右方的解決方案資源管理器中包括兩個(gè)文件夾:AppCode,AppData;兩個(gè)文件:Service.asmx和Service.cs。
在自建工藝美術(shù)數(shù)據(jù)庫的Web服務(wù),Service.cs包含的關(guān)鍵代碼如下:
(1)添加引用
using System.Data;
using System.Data.SqlClient;
(2)更改命名空間
[WebService(Namespace=″http:∥gymszyk.jstu.edu.cn/″)]
(3)編寫用戶調(diào)用方法,提供用戶服務(wù)功能
例如查詢工藝美術(shù)資源庫中名稱是變量title的Web服務(wù)功能代碼如下:
[WebMethod]
public System.Data.DataSet GetTitleResults(string title)
{
∥建立查詢字符串和數(shù)據(jù)庫連接
string strQuery=″select distinct*from gyp where mingcheng like’%″+title+″%’″;
SqlConnection myConnection=new SqlConnection(″Server=192.168.24.28;database=gymszyk;User ID=sa″);
∥執(zhí)行查詢
SqlDataAdapter myCommand=new SqlDataAdapter(strQuery,myConnection);
∥定義DataSet對(duì)象,并將結(jié)果存入DataSet對(duì)象中
System.Data.DataSet ds=new System.Data.DataSet();
myCommand.Fill(ds,″gyp″);
∥返回結(jié)果DataSet對(duì)象
return ds;
}
在調(diào)試過程中,可以通過CTRL+F5生成服務(wù),進(jìn)入服務(wù)測(cè)試界面,查看結(jié)果是否符合要求。
2 .NET中自建數(shù)據(jù)庫Web Service的部署
ASP.NET Web服務(wù)是由作為所謂的IIS虛擬應(yīng)用程序運(yùn)行的資源集合組成的。在使用VS.NET創(chuàng)建Web服務(wù)項(xiàng)目時(shí),可以自動(dòng)完成這種虛擬應(yīng)用程序的配置。IIS的虛擬目錄成為ASP.NET應(yīng)用程序很好的容器。因此只需要在IIS上新建一個(gè)應(yīng)用程序目錄,并包括我們創(chuàng)建Web服務(wù)時(shí)的目錄,就可以通過IIS來引用這個(gè)Web服務(wù)。下面把工藝美術(shù)資源數(shù)據(jù)庫的Web服務(wù)部署在IIS上,具體步驟如下:
(1)在Internet Services Manager管理單元中新建一個(gè)虛擬目錄,別名gymszyk,指定對(duì)應(yīng)的目錄為Web服務(wù)開發(fā)的目錄,在設(shè)置訪問權(quán)限時(shí),把“執(zhí)行”權(quán)限打勾,完成后則該虛擬目錄就被配置成為一個(gè)IIS虛擬應(yīng)用程序。
(2)在新建的虛擬目錄根目錄下手工添加bin目錄。因?yàn)閎in目錄是.NET查找已編程序集的第一個(gè)位置,新建這個(gè)目錄就是為了存放Web服務(wù)編譯產(chǎn)生的DLL文件。
(3)利用CSC命令編譯源代碼。
例如在VS 2005命令提示中,可以在源代碼目錄中執(zhí)行以下命令進(jìn)行源代碼編譯:
Csc/out:bin\\Service.dll/target:library/r:System.Web.Services.dll Service.cs
3 .NET中中間層統(tǒng)一檢索網(wǎng)站的實(shí)現(xiàn)
在Microsoft的Visual Studio.net 2005的平臺(tái)下網(wǎng)站建立步驟如下:
在起始頁創(chuàng)建網(wǎng)站中選擇ASP.NET網(wǎng)站,目錄位置定為我們新建的存入網(wǎng)站內(nèi)容的目錄d:\yjs。工具將自動(dòng)產(chǎn)生AppCode目錄和Default.aspx、Default.aspx.cx和Web.Config文件。界面設(shè)計(jì)和功能實(shí)現(xiàn)設(shè)計(jì)主要都會(huì)在這3個(gè)文件中完成。
3.1 .NET中網(wǎng)站界面的設(shè)計(jì)
網(wǎng)站界面設(shè)計(jì)即用戶界面,它是系統(tǒng)的用戶接口部分,是用戶與系統(tǒng)交互信息的窗口,主要功能是向用戶展示與系統(tǒng)功能有關(guān)的操作和服務(wù),并根據(jù)用戶操作請(qǐng)求顯示操作結(jié)果,因此,一般情況下對(duì)客戶端的設(shè)計(jì)要求都是:簡單直觀,智能方便。根據(jù)這個(gè)原則設(shè)計(jì)界面。
3.2 .NET中網(wǎng)站功能的實(shí)現(xiàn)
3.2.1 .NET中Web服務(wù)的訪問
.NET中使用Web服務(wù)模式采用了客戶代理,這些客戶代理是一些.NET類型,為客戶封裝了向Web服務(wù)發(fā)出SOAP調(diào)用的過程。特定服務(wù)的代理類通常是從它的WSDL文檔創(chuàng)建的。一旦創(chuàng)建了這個(gè)代理類,你需要做的就是在項(xiàng)目中引用它,就像使用其他任何程序集或COM對(duì)象一樣。然后,對(duì)Web服務(wù)的所有調(diào)用都將通過代理對(duì)象的一個(gè)實(shí)例進(jìn)行處理,這個(gè)實(shí)例實(shí)現(xiàn)了與服務(wù)器SOAP的對(duì)話。工藝美術(shù)資源數(shù)據(jù)庫Web服務(wù)代理的創(chuàng)建步驟如下:
(1)從統(tǒng)一檢索站點(diǎn)解決方案內(nèi)查看,在菜單“網(wǎng)站”中選擇“添加Web引用”。
(2)查找工藝美術(shù)資源數(shù)據(jù)庫Web服務(wù)后,選中,設(shè)Web引用名Gymszyk,單擊添加引用。平臺(tái)將自動(dòng)生成了文件目錄AppWebReferences,為每個(gè)服務(wù)增加一個(gè)目錄和擴(kuò)展名為disco,discomap,wsdl的3個(gè)文件。
添加了代理之后,只要在代碼中添加引用,就能方便地訪問Web服務(wù)里面的服務(wù)了。
訪問工藝美術(shù)資源數(shù)據(jù)庫Web服務(wù)的關(guān)鍵代碼如下:
(1)添加引用
using Gymszyk;∥Gymszyk是Web服務(wù)引用名。
(2)調(diào)用代碼
System.Data.DataSet ds;
Service gy=new Service();
ds=gy.GetCreatorResults(Scontent.Text);
GridView1.DataSource=ds;
3.2.2 檢索的分解實(shí)現(xiàn)
分解算法如圖2:
圖2 查詢分解流程
程序?qū)崿F(xiàn)流程基本如下:
If (GYCheck.Checked)∥如果工藝美術(shù)資源數(shù)據(jù)庫選中
{
If(SType.SelectedIndex==0)∥如果選中標(biāo)題
? {
∥訪問工藝美術(shù)資源數(shù)據(jù)庫Web服務(wù)中按名稱查詢功能
}
Else If(SType.SelectedIndex==1)∥如果選中作者
{
∥訪問工藝美術(shù)資源數(shù)據(jù)庫Web服務(wù)中按作者查詢功能
}
}
If (HWCheck.Checked)
{
If(SType.SelectedIndex==0)∥如果選中標(biāo)題
? {
?
∥訪問匯文圖書數(shù)據(jù)庫Web服務(wù)中按名稱查詢功能
?
}
Else If(SType.SelectedIndex==1)∥如果選中作者
?
{
?
∥訪問匯文圖書數(shù)據(jù)庫Web服務(wù)中按作者查詢功能
?
}
}
If(CXCheck.Checked)
{
?
If(SType.SelectedIndex==0)∥如果選中標(biāo)題
?
{
?
∥訪問超星數(shù)據(jù)庫Web服務(wù)中按書名查詢功能
?
}
?
Else If(SType.SelectedIndex==1)∥如果選中作者
?
{
?
∥訪問超星數(shù)據(jù)庫Web服務(wù)中按作者查詢功能
?
}
}
3.2.3 結(jié)果融合和顯示
結(jié)果融合和顯示的實(shí)現(xiàn)流程如圖3所示。
開始↓根據(jù)制訂的元數(shù)據(jù)標(biāo)準(zhǔn)建立一個(gè)類型化DataSet↓根據(jù)分解算法得到查詢結(jié)果后,依次將結(jié)果合并入類型化DataSet↓對(duì)類型化DataSet排序顯示↓結(jié)束圖3 結(jié)果副合和顯示流程
(1)類型化DataSet的建立
首先參照DC制訂的全局元數(shù)據(jù)是:
題名(Ttitle):存放資源名稱。
創(chuàng)建者(Tcreator):對(duì)創(chuàng)造資源知識(shí)內(nèi)容負(fù)主要責(zé)任的個(gè)人或機(jī)構(gòu)。
日期(Tdate):指與創(chuàng)建或使資源成為可利用狀態(tài)相關(guān)的日期。
類型(Ttype):資源的類別。
來源(Tsource):資源的出處,當(dāng)前資源可以從來源資源中獲取詳細(xì)資源。
來自的數(shù)據(jù)庫(Tcontributor):資源來自何數(shù)據(jù)庫。
根據(jù)這個(gè)元數(shù)據(jù)標(biāo)準(zhǔn)建立個(gè)具體預(yù)定結(jié)構(gòu)的DataSet。方法如下:
第一步,創(chuàng)建類型化表的模式文檔tDataSet.xsd。
第二步,利用模式文檔生成類型化的DataSet。
在.NET環(huán)境DOS命令行如下命令:
Xsd tDataSet.xsd/d/l:cs
運(yùn)行后將生成一個(gè)文件tDataSet.cs,包括一個(gè)類型化的tDataSet類,我們就可以像其他任何DataSet一樣實(shí)例化和使用這個(gè)類了。
(2)結(jié)果融合和顯示實(shí)現(xiàn)
結(jié)果融合算法思路如下:
設(shè)Web服務(wù)WSi返回結(jié)果Ri,UR存放結(jié)果集。
(1)取出Web服務(wù)WSi返回結(jié)果集Ri;
(2)合并、去重表Ri,得到結(jié)果集元數(shù)據(jù)表UR;
(3)對(duì)結(jié)果集元數(shù)據(jù)表UR進(jìn)行排序,按時(shí)間進(jìn)行降序排;
(4)返回結(jié)果顯示。
實(shí)現(xiàn)具體關(guān)鍵步驟如下:
第一步,定義一個(gè)公共的類型化DataSet變量。
tDataSet shareDs=new tDataSet();
第二步,將Web調(diào)用結(jié)果導(dǎo)入DataSet變量。
∥ds是Web服務(wù)返回的DataSet結(jié)果集
for(int i=0;i { ? DataRow tempData=shareDs.Tables[0].NewRow(); ∥把ds中的數(shù)據(jù)讀出一行 ? tempData[″Ttitle″]=ds.Tables[0].Rows[i][″mingcheng″].ToString(); ? tempData[″Tcreator″]=ds.Tables[0].Rows[i][″zuoze″].ToString(); ? tempData[″Ttype″]=ds.Tables[0].Rows[i][″type″].ToString(); ? tempData[″Tcontributor″]=″工藝美術(shù)資源數(shù)據(jù)庫″; ? tempData[″Tdate″]=ds.Tables[0].Rows[i][″niandai″].ToString(); ? tempData[″Tsource″]=ds.Tables[0].Rows[i][″identifier″].ToString(); ? ∥把ds中數(shù)據(jù)讀出一行加入到公共DataSet中 ? shareDs.Tables[0].Rows.Add(tempData); } 第三步,顯示排序結(jié)果集。 排序顯示關(guān)鍵代碼: shareDs.Tables[0].DefaultView.Sort=″Tdate desc″;∥按時(shí)間排序 GridView1.DataSource=shareDs;∥綁定到數(shù)據(jù)控件顯示 GridView1.DataBind(); …… 4 結(jié)束語 本文結(jié)合我館本地?cái)?shù)據(jù)庫,基于Web服務(wù)技術(shù),利用.NET和C#工具,進(jìn)行了系統(tǒng)設(shè)計(jì)與開發(fā)。通過Web服務(wù)將各個(gè)異構(gòu)數(shù)據(jù)庫進(jìn)行包裝處理,并在ASP.NET平臺(tái)將Web服務(wù)進(jìn)行融合,以統(tǒng)一的形式為用戶提供檢索的服務(wù),為資源庫的用戶提供了一種更好的統(tǒng)一檢索服務(wù) 。集成更多數(shù)據(jù)源檢索接口,對(duì)結(jié)果融合算法進(jìn)行優(yōu)化,是今后工作的重點(diǎn)。 參考文獻(xiàn) [1]韓炳黎.數(shù)字圖書館統(tǒng)一檢索研究及開發(fā)[J].現(xiàn)代情報(bào),2006,(3):25-27. [2]周慧貞,廖先軍.軍校圖書館統(tǒng)一檢索系統(tǒng)的研究與設(shè)計(jì)[J].現(xiàn)代圖書情報(bào)技術(shù),2006,(10):34-37. [3]李安渝.Web Services技術(shù)與實(shí)現(xiàn)[M].北京:國防工業(yè)出版社,2003.1. [4]柴曉路.web服務(wù)架構(gòu)與開放互操作技術(shù)[M].北京:清華大學(xué)出版社,2002. [5]Christian Nagel,Bill Evjen,Jay Glynn.C#高級(jí)編程.2006.