嚴(yán)永松
[摘 要]在搜索引擎的設(shè)計以及類似的軟件功能設(shè)計中,一個必不可少的功能就是:對已有搜索結(jié)果的二次檢索。如果能在客戶端對已經(jīng)下載的數(shù)據(jù)集合進(jìn)行二次檢索,將極大地減輕web服務(wù)器以及數(shù)據(jù)庫服務(wù)器的負(fù)擔(dān)。本文以一個實例,采用msxml dom方案介紹了二次檢索的實現(xiàn)。
[關(guān)鍵詞]XML XML編程接口 二次檢索
[中圖分類號]G[文獻(xiàn)標(biāo)識碼]A[文章編號]1007-9416(2009)12-0058-03
[Abstract]In the search engine design,and software functions like design,an essential function is:To have the secondary search results retrieved.If the client already downloaded a second collection of data retrieval,will greatly reduce the web server and database server burden.In this paper,an example of using msxml-dom program introduced the realization of the second search.
[Key word]XML/ XML Programming Interface/Secondary Search
在搜索引擎的設(shè)計以及類似的軟件功能設(shè)計中,一個必不可少的功能就是:對已有搜索結(jié)果的二次檢索。如果檢索的數(shù)據(jù)集是靜態(tài)數(shù)據(jù)(例如存放在數(shù)據(jù)庫中),通常的做法是在已有的檢索條件的基礎(chǔ)上,動態(tài)加入新的約束條件。但是重新構(gòu)造數(shù)據(jù)檢索的約束條件,往往需要用戶同服務(wù)器再次交互,重新下載所需數(shù)據(jù)集合并輸出。如果能在客戶端對已經(jīng)下載的數(shù)據(jù)集合進(jìn)行二次檢索,將極大地減輕web服務(wù)器以及數(shù)據(jù)庫服務(wù)器的負(fù)擔(dān)。
xml能夠很大程度地滿足以上需求。它將數(shù)據(jù)內(nèi)容本身與數(shù)據(jù)顯示格式獨立開來,分別處理。這樣,如果需要改變文檔的顯示方式,只要修改樣式文件(xsl)就可以了。xml的自我描述特性能夠很好地表現(xiàn)許多復(fù)雜的數(shù)據(jù)關(guān)系,使得基于xml的應(yīng)用程序可以在xml文件中準(zhǔn)確高效地搜索相關(guān)的數(shù)據(jù)內(nèi)容,忽略其他不相關(guān)的部分。同時,整個數(shù)據(jù)操作都是在客戶端完成,大大減輕了服務(wù)器的負(fù)擔(dān)。
1 xml編程接口dom簡介
dom(document object model,文檔對象模型)是一種與平臺和語言無關(guān)的編程接口,它允許程序和腳本動態(tài)訪問和修改文檔的內(nèi)容結(jié)構(gòu)和類型。它定義了一系列的對象和方法對dom樹的節(jié)點進(jìn)行各種隨機操作。
(1)document對象:是dom樹的最頂層節(jié)點,是對整個文檔進(jìn)行操作的入口。
(2)element和attr對象:這些節(jié)點對象都是文檔某部分的映射,節(jié)點的層次恰好反映了文檔的結(jié)構(gòu)。
(3)text對象:作為element和attr對象的子節(jié)點,text對象表達(dá)了元素或?qū)傩缘奈谋緝?nèi)容。text節(jié)點不再包含任何子節(jié)點。
(4)集合索引:dom提供了多種集合索引方式,可以對節(jié)點按指定方式進(jìn)行遍歷。
dom采用以上介紹的一系列接口來描述xml文檔的內(nèi)容和結(jié)構(gòu),即利用對象將文檔模型化。這種對象模型實現(xiàn)的基本功能包括:
(5)描述文檔表示和操作的接口;
(6)接口的行為和屬性;
(7)接口之間的關(guān)系以及互操作。
dom對結(jié)構(gòu)化的xml文檔進(jìn)行解析,文檔中的元素、實體、屬性等所有個體都可以用對象模型表示。整個文檔的邏輯結(jié)構(gòu)類似一棵樹,生成的對象模型就是樹的節(jié)點,每個對象同時包含了方法和屬性。dom提供了許多查找節(jié)點的方法。其中用于搜索的方法有:
(1)根據(jù)標(biāo)簽名稱搜索元素:利用document對象中的getelementsbytagname方法在全文范圍內(nèi)查找元素;
(2)使用xsl模式搜索節(jié)點:所有類型的節(jié)點都帶有selectnodes方法,調(diào)用這個方法可以利用xsl的模式匹配策略查找節(jié)點;
(3)使用集合索引搜索節(jié)點:索引參數(shù)都是從0開始計數(shù)的,例如子節(jié)點childnodes對象集。利用dom,開發(fā)人員可以動態(tài)地創(chuàng)建xml、遍歷文檔、增加(刪除/修改)文檔內(nèi)容。dom提供的api與編程語言無關(guān),所以對一些dom標(biāo)準(zhǔn)中沒有明確定義的接口,不同解析器的實現(xiàn)方法有可能有所差別。本文的示例采用msxml dom方案,并采用ie 5.0作為輸出顯示的瀏覽器。
2 軟件實現(xiàn)
以下用一個簡單的學(xué)生成績查詢系統(tǒng)為例具體說明如何實現(xiàn)??梢韵劝凑諏W(xué)生所在的班級將學(xué)生成績查詢出來,然后可以選出平均分高于設(shè)定分?jǐn)?shù)(用一個文本框接收設(shè)定分?jǐn)?shù))的學(xué)生列表。
在sql server中包含一個學(xué)生成績表,關(guān)鍵字段有:學(xué)生姓名(name)、班級(class)、單科成績(yuwen、shuxue、jisuanji、yingyu等)、平均成績(averagescore)。
首先,編輯初始頁面以提供按班級查詢學(xué)生成績的功能。
myrearch.asp文件中,提供按平均成績查詢的二次查詢功能。關(guān)鍵代碼如下:
<%@ language=vbscript %>
//建立數(shù)據(jù)庫連接,并根據(jù)用戶需求,從數(shù)據(jù)庫中檢索出所有符合要求的數(shù)據(jù)集
<% set conn=server.createobject(“adodb.connection”)%>
<% set rs=server.createobject(“adodb.recordset”) %>
<% conn. open application(“sqlserver conn”) %>
<% sqltext=“select * from scoretable where class=‘” %>
<% sqltext=sqltext & request.form(“classname”) & “” %>
<% set rs=conn.execute(sqltext) %>
<% rs.movefirst %>
//在html文件中建立一個xml數(shù)據(jù)對象(xml數(shù)據(jù)島)
//并且將數(shù)據(jù)庫檢索的數(shù)據(jù)集寫入該數(shù)據(jù)島中
<% do while not rs.eof %>
<% for i=0 to rs.fields.count-1 %>
//以數(shù)據(jù)庫表的列名為xml節(jié)點的節(jié)點名
<<%=rs.fields(i).name %>>
<%=rs.fields(i).value %>
>
<% next %>
<% rs.movenext %>