版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一個(gè)知識(shí)庫(kù)系統(tǒng)與外部數(shù)據(jù)源接口的研究 馬金平 邢筠(青島大學(xué)商學(xué)院管理系, 266071)摘要 本文論述了一個(gè)知識(shí)庫(kù)系統(tǒng)與外部數(shù)據(jù)源接口的描述定義和程序?qū)崿F(xiàn)方法。關(guān)鍵詞 知識(shí)庫(kù)系統(tǒng) 數(shù)據(jù)庫(kù) 數(shù)據(jù)源1 引言隨著智能決策支持系統(tǒng)應(yīng)用領(lǐng)域的不斷擴(kuò)大,原來由模型庫(kù)系統(tǒng)完成的部分定量分析任務(wù),將歸并到知識(shí)庫(kù)系統(tǒng)中。即要求知識(shí)庫(kù)中,不僅有專家的定性知識(shí),而且也應(yīng)該具有計(jì)算知識(shí),形成一個(gè)廣義的知識(shí)庫(kù)系統(tǒng)。在廣義知識(shí)庫(kù)系統(tǒng)中,要求推理機(jī)不僅要具有一般的推理功能,而且能夠從外部數(shù)據(jù)源獲取數(shù)據(jù),對(duì)數(shù)學(xué)模型進(jìn)行求解的功能。如何從外部數(shù)據(jù)源獲取數(shù)據(jù),是使推理機(jī)具有模型求解功能的關(guān)鍵技術(shù)之一。筆者在生產(chǎn)成本管理知識(shí)庫(kù)系
2、統(tǒng)的開發(fā)過程中,使用Visual c+6.0 成功地研究開發(fā)了該知識(shí)庫(kù)系統(tǒng)與外部數(shù)據(jù)源的接口,拓寬了推理機(jī)的功能,收到了比較好的效果。外部數(shù)據(jù)源主要是指文本數(shù)據(jù)文件、數(shù)據(jù)庫(kù)和Excel電子表。由于受篇幅限制,本文主要針對(duì)知識(shí)庫(kù)系統(tǒng)與文本數(shù)據(jù)文件、數(shù)據(jù)庫(kù)接口的設(shè)計(jì)實(shí)現(xiàn)問題進(jìn)行討論。知識(shí)庫(kù)系統(tǒng)與Excel電子表的接口問題,筆者將另撰文介紹。2 接口的描述定義在生產(chǎn)成本管理知識(shí)庫(kù)中,以知識(shí)數(shù)據(jù)塊的形式對(duì)外部數(shù)據(jù)源進(jìn)行如下描述定義。2.1 文本數(shù)據(jù)文件接口的定義格式 DATAFILE /可以定義多個(gè)文件的接口。 <文件句柄>=OPEN(<文件名稱>)/在一個(gè)接口中,可以定義任意
3、個(gè)輸入數(shù)據(jù)文件。 <變量>=READ(<文件句柄>,行號(hào),列號(hào))/可以有多行。 | /或 WITH <文件句柄> <變量>=READ(行號(hào),列號(hào)) /可以有多行。 END WITH END DATAFILE 2.2數(shù)據(jù)庫(kù)接口的定義格式 DATABASE /在一個(gè)知識(shí)庫(kù)中可以定義多個(gè)這樣的接口 CONNECTION <ADO連接對(duì)象名>=<連接字符串> /可以同時(shí)定義多個(gè)連接對(duì)象 INPUTTABLE /每個(gè)接口只能定義一個(gè)輸入塊。 RECORDSET <ADO記錄集對(duì)象名>=<SQL查詢語(yǔ)句>,CO
4、NNECTION <ADO連接對(duì)象名> /可以定義多個(gè)記錄集對(duì)象名。 變量=<ADO記錄集對(duì)象名>.FIELDS(字段序號(hào))/可以有多行 | /或 WITH ADO記錄集對(duì)象名> <變量 >=.FIELDS(字段序號(hào)) /可以有多行 END WITH END INPUTTABLE OUTPUTTABLE /定義與存儲(chǔ)結(jié)果數(shù)據(jù)表的接口,每個(gè)接口最多可以定義一個(gè)輸出塊。 RECORDSET <ADO記錄集對(duì)象名>=<SQL查詢語(yǔ)句>,<ADO連接對(duì)象名>; <ADO記錄集對(duì)象名>.FIELDS(字段序號(hào))=變
5、量; | /或 WITH <ADO記錄集對(duì)象名> FIELDS(變量序號(hào))=<變量>; END WITH END OUTPUTTABLE END DATABASE在上述格式中,變量是指計(jì)算表達(dá)式及模型中需要用戶提供值的參數(shù),或存儲(chǔ)表達(dá)式及模型的求解結(jié)果?!?”表示注釋。此外,筆者在生產(chǎn)成本管理知識(shí)庫(kù)系統(tǒng)開發(fā)工具中,開發(fā)了知識(shí)庫(kù)與外部數(shù)據(jù)源接口定義的輔助工具,用戶利用這些工具可以十分方便地完成接口的描述定義工作。3 接口程序的實(shí)現(xiàn)在推理機(jī)運(yùn)行之前,首先將知識(shí)庫(kù)讀入內(nèi)存,并且轉(zhuǎn)換成計(jì)算機(jī)的內(nèi)部表現(xiàn)形式。接口程序再根據(jù)知識(shí)庫(kù)與外部數(shù)據(jù)源接口的定義,將外部數(shù)據(jù)源的數(shù)據(jù)讀入內(nèi)存緩
6、沖區(qū)后,最后在進(jìn)行推理。為了便于查找知識(shí)庫(kù)與外部數(shù)據(jù)源接口的定義語(yǔ)句,首先定義如下數(shù)據(jù)結(jié)構(gòu):struct LineText /存儲(chǔ)知識(shí)庫(kù)語(yǔ)句行文本。 CString Text;/存儲(chǔ)知識(shí)庫(kù)語(yǔ)句行文本struct linetext *pNextLine;/下一行指針 *pLineTextHead; /知識(shí)庫(kù)語(yǔ)句首行指針。struct DataObject /知識(shí)數(shù)據(jù)塊對(duì)象索引表 CString ObjecType;/對(duì)象類型struct LineText *pTextLine;/對(duì)象首行在LineText中的指針struct DataObject *pNextObject;/指向下一個(gè)知識(shí)數(shù)據(jù)塊
7、對(duì)象。struct KnowClsName /存儲(chǔ)知識(shí)類名稱定義語(yǔ)句文本 CString ClsName;/知識(shí)類名稱struct KnowClsName *pNextCls;/下知識(shí)類名稱的指針struct LlineText *pTextLine;/知識(shí)類名稱在LineText中的指針struct DataObject *pFirstObject;/指向知識(shí)類中第一個(gè)知識(shí)數(shù)據(jù)塊對(duì)象的指針struct Method *pFirstMethod;/指向知識(shí)類中第一個(gè)知識(shí)方法的指針*pClsHead;/指向知識(shí)類的頭指針。根據(jù)上述數(shù)據(jù)結(jié)構(gòu)的定義,接口程序總體實(shí)現(xiàn)的程序流程如圖1所示。在圖1中,當(dāng)
8、pDo->ObjectType等于“DATAFILE“或“DATABASE”或“EXCEL”時(shí),系統(tǒng)分別調(diào)用從文本數(shù)據(jù)文件、數(shù)據(jù)庫(kù)和EXCEL電子表獲取數(shù)據(jù)的接口函數(shù)。其中:文本數(shù)據(jù)文件接口函數(shù)的程序流程如圖2所示,數(shù)據(jù)庫(kù)接口函數(shù)的程序流程如圖3所示?!癘THER”表示知識(shí)庫(kù)中的其它知識(shí)數(shù)據(jù)塊對(duì)象。開始pClspClsHead終止pDo=pClspFirstObjectpCls=NULL?? No Yes pDoObjectType=?pDo=NULL? Yes No pCls=pClspNextCls AB C DATABASE EXCEL OTHER DATAFILEpDo=pDop
9、NextObject 圖1 接口程序總體實(shí)現(xiàn)的程序流程 3.1 數(shù)據(jù)文件接口函數(shù)程序的實(shí)現(xiàn)為了存儲(chǔ)從外部數(shù)據(jù)文件獲取的數(shù)據(jù),定義如下數(shù)據(jù)結(jié)構(gòu):struct DataFileBuffer /數(shù)據(jù)文件緩沖區(qū) CString VariableName;/變量名稱 double DataValue;/從文本文件獲取的變量值 struct DataBuffer *pNextPata;/指向下一個(gè)變量的指針*pDataBufferHead,*pDataBufferTail;/緩沖區(qū)的頭指針和尾指針。據(jù)此,繪出從外部數(shù)據(jù)文件獲取數(shù)據(jù)的接口函數(shù)的程序流程如圖2。由于受篇幅限制,圖2僅給出了程序的主要算法流程。
10、在編程時(shí),還必須考慮具體實(shí)現(xiàn)的細(xì)節(jié),例如:如何從一個(gè)數(shù)據(jù)行中,確定數(shù)據(jù)項(xiàng)數(shù)量,找到Col列;如何創(chuàng)建DataFileBuffer的鏈表結(jié)構(gòu)等。3.2 數(shù)據(jù)庫(kù)接口函數(shù)程序的實(shí)現(xiàn) 根據(jù)上述知識(shí)庫(kù)與數(shù)據(jù)庫(kù)接口的定義格式以及知識(shí)庫(kù)內(nèi)部存儲(chǔ)結(jié)構(gòu),可以繪制出數(shù)據(jù)庫(kù)接口函數(shù)程序總體流程如圖3所示。其中:D表示輸入數(shù)據(jù)表接口程序流程,如圖4所示;E表示輸出數(shù)據(jù)表接口程序流程。3.2.1 輸入數(shù)據(jù)表接口程序的實(shí)現(xiàn)為了存儲(chǔ)從輸入數(shù)據(jù)表獲取的數(shù)據(jù),定義數(shù)據(jù)結(jié)構(gòu)如下: struct InputDataBuffer /存儲(chǔ)從數(shù)據(jù)庫(kù)獲得的數(shù)據(jù),每一個(gè)變量建立一個(gè)數(shù)據(jù)區(qū) _variant_t DataValue;/可以存儲(chǔ)
11、不同類型的數(shù)據(jù);struct InputDataBuffer *pNextDataValue;;struct PremiseVariableBuffer /前提變量(自變量)集區(qū),接受來自數(shù)據(jù)庫(kù)的數(shù)據(jù) CString VariableName;struct InputDataBuffer *pInputDataBufferHead;/指向數(shù)據(jù)區(qū)頭指針。struct PremiseVariableBuffer *pNextVariable;/指向下一個(gè)變量。*pPremiseVariableBufferHead,pPremiseVariableBufferTail;據(jù)此,可以繪制出知識(shí)庫(kù)從外部數(shù)
12、據(jù)庫(kù)獲取數(shù)據(jù)的接口程序流程如圖4所示。 ApTL2=pTL1;nFind1=pTL2->Text。Find(”O(jiān)PEN”)定義變量、初始化pTL1=pDopTextLinepTL1=pTL1pNextLine nfind1>-1? No YespTL1Text=”END DATAFILE” ?找出文件名稱、文件句柄名稱,并且打開數(shù)據(jù)文件(設(shè)對(duì)象名為MyFile)。Ptl2<=PTL2->pNextLine No Yes 返回 Ptl2->Text=”END DATAFILE”? Yes pTL1=pTL1->pNextLine Yes pTL2<=pT
13、L2->pNextLine在Ptl2->Text中,找出變量名稱 VariableName,行號(hào)(Row)和列號(hào)(Col);MyFileSeekToBegin();Bool flag=MyFileReadString(mDataLine);設(shè)MyFile當(dāng)前行nLine=1; 在Ptl2->Text中是否存在“READ”和文件句柄名稱? No Yes No Flag=False? No Yes 在mDataLine中找Col列Row=nLine? 顯示消息通知用戶存在錯(cuò)誤 No Yes flag=MyFile.ReadStirng(mDataLine);nLine+;找到否?
14、 No 將數(shù)據(jù)和VariableName采用DataFIleBuffer結(jié)構(gòu)存入內(nèi)存 Yes 圖2 從外部數(shù)據(jù)文件獲取數(shù)據(jù)的接口函數(shù)程序流程BnFind1=pTL1->TextFind(“CONNECTION”)定義變量、初始化pTL1=pDopNextLinepTL1=pTL1pNextLinenFind1>-1? No 找出ADO連接對(duì)象名稱和連接字符串,并打開連接 YespTL1->Text=”END DATABASE” pIT=pTL1-pNextLine;pOT=pTL1->pNextLine Yes No 返回pIT->Text=”INPUTTABLE
15、” pTL1=pTL1->pNextLine pIT=pIT->pNextLineD Yes pOT=pOT->pNextLine NopOT->Text=”O(jiān)UTPUTTAB?LE ”pIT->Text=”END DATABASE”? Yes No EpOT->Text=”END DATABASE”? No No Yes Yes 圖3 數(shù)據(jù)庫(kù)接口程序?qū)崿F(xiàn)的總體流程 D返回 pIT=pIT->pNextLine pRec->Text=”END INPUTTABLE”? Yes pIT->Text=”END INPUTTABLE”? Yes
16、No No pRec=pIT; 在pRec->Text中,查找記錄集對(duì)象名稱RecName、已經(jīng)打開的連接對(duì)象名稱conName, 找到否?pRec=pRec->pNextLine No 從pRec->Text截出SQL命令字符串,執(zhí)行。 Yes 在pField->Text中找RecNamepField->Text=”END INPUTTABLE”? Yes pField=pRec->pNextLine 將第nField字段值存入InputDataBuffer內(nèi)存緩沖區(qū)RecNameMoveNext() No pField=pField->pNextL
17、ine找到否? Yes No Yes RecName.GetadoEOF()?在pField->Text中截出變量名,并且存入PremiseVariableBuffer緩沖區(qū);截出字段序號(hào)nField No 圖4 從外部數(shù)據(jù)庫(kù)獲取數(shù)據(jù)的接口程序流程3.2.2 輸出數(shù)據(jù)表接口程序的實(shí)現(xiàn) 輸出數(shù)據(jù)表用來存儲(chǔ)推理機(jī)對(duì)表達(dá)式或模型的求解結(jié)果。因此,需要在推理機(jī)運(yùn)行之前,根據(jù)輸出數(shù)據(jù)表接口描述的定義,準(zhǔn)確地建立結(jié)果變量與打開數(shù)據(jù)表的記錄集對(duì)象之間以及記錄集對(duì)象與連接對(duì)象之間的鏈接關(guān)系,使得推理完成后,系統(tǒng)能夠正確地連接數(shù)據(jù)庫(kù)和打開數(shù)據(jù)表,將求解結(jié)果存入到數(shù)據(jù)表中。為此,定義如下數(shù)據(jù)結(jié)構(gòu):struc
18、t OutputDataBuffer/推理機(jī)將結(jié)果寫入該區(qū)域 CString ConclVariableName;/推理完成以后,按變量名稱排序 _Varian_t DataValue;/可以存儲(chǔ)不同類型的數(shù)據(jù); struct OutputDataBuffer *pNextDataValue;*pOutputDataBufferHead,*pOutputDataBufferTail;struct ConclVariableBuffer /結(jié)果變量緩沖區(qū) CString VariableName; CString ConObjectName;/排序 可以減少連接數(shù)據(jù)庫(kù)的次數(shù) CString Re
19、cObjectName;/排序 可以減少打開記錄集的次數(shù) int nField;/字段序號(hào) struct OutputDataBuffer *pOutputDataBuffer;/指向輸出數(shù)據(jù)區(qū)的指針 struct ConclVariableBuffer *pNextVariableName;*pConclVariableHead,*pConclVariableTail;struct ConnecObjectName /連接對(duì)象緩沖區(qū) CString ObjectName; CString ConnectionString; struct ConnecObjectName *pNextConn
20、ecObjectName; *pConnecObjectNameHead;struct RecObjectName /記錄集對(duì)象緩沖區(qū) CString ObjectName;/記錄集對(duì)象名稱 CString RecString;/SQL語(yǔ)句字符串 struct RecObjectName *pRecObjectName; *pRecObjectNamehead;程序?qū)崿F(xiàn)流程與圖4相類似,不同之處是:在初始化階段,不需要連接數(shù)據(jù)庫(kù)和打開數(shù)據(jù)表,將找出的結(jié)果變量與打開數(shù)據(jù)表的記錄集對(duì)象之間以及連接對(duì)象之間的對(duì)應(yīng)關(guān)系,存到上述結(jié)構(gòu)所定義的鏈表中。推理機(jī)在推理完成以后,通過指向結(jié)果變量緩沖區(qū)的頭指針獲得整個(gè)鏈
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版交通設(shè)施地形圖保密及規(guī)劃合同3篇
- 二零二五版建筑工程施工圖紙審查招標(biāo)投標(biāo)合同書3篇
- 二零二五年度花展工程花卉品種研發(fā)與專利申請(qǐng)合同3篇
- 二零二五年度綠色建筑項(xiàng)目采購(gòu)合同3篇
- 二零二五版XX個(gè)人商業(yè)秘密保護(hù)合同樣本3篇
- 二零二五年度私人墓地購(gòu)置與墓園墓碑雕刻人才培養(yǎng)合同3篇
- 二零二五年度金融機(jī)構(gòu)貸款擔(dān)保與信用管理合同3篇
- 二零二五版家庭水電維修與改造兼職合同3篇
- 二零二五版廢舊電線電纜回收與資源化利用合同3篇
- 二零二五年度食品行業(yè)環(huán)境保護(hù)設(shè)施租賃合同2篇
- 小學(xué)一年級(jí)英語(yǔ)1a期末學(xué)業(yè)評(píng)價(jià)方案
- 中央廣播電視大學(xué)畢業(yè)生登記表-6
- 搶救制度試卷附有答案
- 勞務(wù)派遣勞務(wù)外包服務(wù)方案(技術(shù)方案)
- 2023年藥品注冊(cè)專員年度總結(jié)及來年計(jì)劃
- 易普拉格科研管理系統(tǒng)
- 最終版 古城文化修復(fù)監(jiān)理大綱
- 拔罐技術(shù)操作考核評(píng)分標(biāo)準(zhǔn)
- 軟件無線電原理與應(yīng)用第3版 課件 第4-6章 軟件無線電硬件平臺(tái)設(shè)計(jì)、軟件無線電信號(hào)處理算法、信道編譯碼技術(shù)
- RB-T 099-2022 進(jìn)口食品供應(yīng)商評(píng)價(jià)技術(shù)規(guī)范
- 戒賭法律協(xié)議書范本
評(píng)論
0/150
提交評(píng)論