0104023一個(gè)知識(shí)庫(kù)系統(tǒng)與外部數(shù)據(jù)源接口的研究(doc)
綜合能力考核表詳細(xì)內(nèi)容
0104023一個(gè)知識(shí)庫(kù)系統(tǒng)與外部數(shù)據(jù)源接口的研究(doc)
一個(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ò)大,原來(lái)由模型庫(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ù)系統(tǒng)的開發(fā)過(guò)程中,使用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)問(wèn)題進(jìn)行討論。 知識(shí)庫(kù)系統(tǒng)與Excel電子表的接口問(wèn)題,筆者將另撰文介紹。 2 接口的描述定義 在生產(chǎn)成本管理知識(shí)庫(kù)中,以知識(shí)數(shù)據(jù)塊的形式對(duì)外部數(shù)據(jù)源進(jìn)行如下描述定義。 2.1 文本數(shù)據(jù)文件接口的定義格式 DATAFILE //可以定義多個(gè)文件的接口。 =OPEN()//在一個(gè)接口中,可以定義任意個(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 = //可以同時(shí)定義多個(gè)連接對(duì)象 INPUTTABLE //每個(gè)接口只能定義一個(gè)輸入塊。 RECORDSET =,CONNECTION //可以定義多個(gè)記錄集對(duì)象名。 〈變量〉=.FIELDS(字段序號(hào))//可以有多行 | //或 WITH 〈ADO記錄集對(duì)象名> = .FIELDS(字段序號(hào)) //可以有多行 END WITH END INPUTTABLE OUTPUTTABLE //定義與存儲(chǔ)結(jié)果數(shù)據(jù)表的接口,每個(gè)接口最多可以定義一個(gè)輸出塊。 RECORDSET =,; .FIELDS(字段序號(hào))=〈變量〉; | //或 WITH .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)存緩沖區(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ù)塊對(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)p Do- >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所示。“OTHER”表示知識(shí)庫(kù)中的其它知識(shí)數(shù) 據(jù)塊對(duì)象。 No Yes Yes No DATABASE EXCEL OTHER DATAFILE 圖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僅給出了程序的主要算法流程。在編程時(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ǔ)不同類型的數(shù)據(jù); struct InputDataBuffer *pNextDataValue;}; struct PremiseVariableBuffer //前提變量(自變量)集區(qū),接受來(lái)自數(shù)據(jù)庫(kù)的數(shù)據(jù) { CString VariableName; struct InputDataBuffer *pInputDataBufferHead;//指向數(shù)據(jù)區(qū)頭指針。 struct PremiseVariableBuffer *pNextVariable;//指向下一個(gè)變量。 }*pPremiseVariableBufferHead,pPremiseVariableBufferTail; 據(jù)此,可以繪制出知識(shí)庫(kù)從外部數(shù)據(jù)庫(kù)獲取數(shù)據(jù)的接口程序流程如圖4所示。 No Yes No Yes Yes Yes No Yes No No Yes No Yes No Yes 圖2 從外部數(shù)據(jù)文件獲取數(shù)據(jù)的接口函數(shù)程序流程 No Yes Yes No Yes No Yes No No No Yes Yes 圖3 數(shù)據(jù)庫(kù)接口程序?qū)崿F(xiàn)的總體流程 Yes Yes No No No Yes Yes No Yes No Yes No 圖4 從外部數(shù)據(jù)庫(kù)獲取數(shù)據(jù)的接口程序流程 3.2.2 輸出數(shù)據(jù)表接口程序的實(shí)現(xiàn) 輸出數(shù)據(jù)表用來(lái)存儲(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): struct 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 RecObjectName;//排序 可以減少打開記錄集的次數(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 *pNextConnecObjectName; }*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ī)在推理完成以后,通過(guò)指向結(jié)果變量緩沖區(qū)的 頭指針獲得整個(gè)鏈表的入口,將結(jié)果數(shù)據(jù)存入輸出數(shù)據(jù)表中。 4 結(jié)束語(yǔ) 本文開發(fā)的知識(shí)庫(kù)系統(tǒng)與外部數(shù)據(jù)源的接口作為生產(chǎn)成本管理知識(shí)庫(kù)系統(tǒng)開發(fā)工具的 重要組成部分,目前正在兩個(gè)不同類型的企業(yè)進(jìn)行試運(yùn)行,已經(jīng)收到了比較好的效果。 應(yīng)用實(shí)踐證明,該系統(tǒng)運(yùn)行穩(wěn)定可靠,接口描述定義格式簡(jiǎn)單實(shí)用。我們準(zhǔn)備將接口程 序轉(zhuǎn)為ActiveX DLL 組件形式,便于在不同的知識(shí)庫(kù)系統(tǒng)中使用,以獲得更好的效果。 參考文獻(xiàn) 1 Eugene Olafsen等著, 王建華等譯. MFC Visual C++6編程技術(shù)內(nèi)幕. 機(jī)械工業(yè)出版社, 2000年版 2 熊范綸等. 雄風(fēng)專家系統(tǒng)開發(fā)工具. 清華大學(xué)出飯社, 1999年版 3 王永慶. 人工智能原理與方法. 西安交通大學(xué)出版社, 1998年版 The Study on Interface of a Knowledge Base System and External DataSource Ma Jinping Xing jun (Manangement Department QingDao University , 266071) Abstract This paper discussed describe definition and program implementation method on interface of a Knowledge Base System and External DataSource. Key words Knowledge Base System DataBase DataSource ----------------------- 開始pCls=pClsHead pCls=NULL??? 終止 pDo=pCls->pFirstObject pDo=NULL? pDo->ObjectType=? pCls=pCls->pNextCls A B C pDo=pDo->pNextObject flag=MyFile.ReadStirng(mDataLine);nLine++; 顯示消息通知用戶存在錯(cuò)誤 在mDataLine中找Col列 Row=nLine? 將數(shù)據(jù)和VariableName采用 DataFIleBuffer結(jié)構(gòu)存入內(nèi)存 Flag=False? 在Ptl2->Text中,找出變量名稱 VariableName,行號(hào)(Row)和列號(hào)(Col);MyFile.SeekToBegin();Bool flag=MyFile.ReadString(mDataLine);設(shè)MyFile當(dāng)前行nLine=1; 在Ptl2->Text中是否存在“READ”和文件句柄名稱? pTL2pNextLine Ptl2->Text=”END DATAFILE”? 找到否? pTL1=pTL1->pNextLine 找出文件名稱、文件句柄名稱,并且打開數(shù)據(jù)文件(設(shè)對(duì)象名為MyFile)。Ptl2pNextLine 返回 nfind1>-1? pTL2=pTL1;nFind1=pTL2->Text。Find(”O(jiān)PEN”) pTL1->Text=”END DATAFILE” ? 定義變量、初始化pTL1=pDo->pTextLine pTL1=pTL1->pNextLine A B 定義變量、初始化pTL1=pDo->pNextLine pTL1=pTL1->pNextLine pTL1->Text=”END DATABASE” nFind1=pTL1->Text.Find(“CONNECTION”) nFind1>-1? pTL1=pTL1->pNextLine 返回 找出ADO連接對(duì)象名稱和連接字符串,并打開連接 pIT=pTL1-pNextLine;pOT=pTL1->pNextLine pIT->Text=”INPUTTABLE” pIT=pIT->pNextLine D pIT->Text=”END DATABASE”? pOT->Text=”O(jiān)UTPUTTAB?LE ” pOT=pOT->pNextLine E pOT->Text=”END DATABASE”? D pIT=pIT->pNextLine pIT->Text=”END INPUTTABLE”? pRec=pIT; 在pRec->Text中,查找記錄集對(duì)象名稱RecName、已經(jīng)打開的連接對(duì)象名稱conName, 找到否? pRec->Text=”END INPUTTABLE”? pRec=pRec->pNextLine 返回 pField=pRec->pNextLine 從pRec->Text截出SQL命令字符串,執(zhí)行。 在pField->Text中找RecName 找到否? pField=pField->pNextLine pField->Text=”END INPUTTABLE”? 在pField- >Text中截出變量名,并且存入PremiseVariableBuffer緩沖區(qū);截出字段序號(hào)nField RecName.GetadoEOF()? 將第nField字段值存入InputDataBuffer內(nèi)存緩沖區(qū) RecName.MoveNext()
0104023一個(gè)知識(shí)庫(kù)系統(tǒng)與外部數(shù)據(jù)源接口的研究(doc)
一個(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ò)大,原來(lái)由模型庫(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ù)系統(tǒng)的開發(fā)過(guò)程中,使用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)問(wèn)題進(jìn)行討論。 知識(shí)庫(kù)系統(tǒng)與Excel電子表的接口問(wèn)題,筆者將另撰文介紹。 2 接口的描述定義 在生產(chǎn)成本管理知識(shí)庫(kù)中,以知識(shí)數(shù)據(jù)塊的形式對(duì)外部數(shù)據(jù)源進(jìn)行如下描述定義。 2.1 文本數(shù)據(jù)文件接口的定義格式 DATAFILE //可以定義多個(gè)文件的接口。 =OPEN()//在一個(gè)接口中,可以定義任意個(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 = //可以同時(shí)定義多個(gè)連接對(duì)象 INPUTTABLE //每個(gè)接口只能定義一個(gè)輸入塊。 RECORDSET =,CONNECTION //可以定義多個(gè)記錄集對(duì)象名。 〈變量〉=.FIELDS(字段序號(hào))//可以有多行 | //或 WITH 〈ADO記錄集對(duì)象名> = .FIELDS(字段序號(hào)) //可以有多行 END WITH END INPUTTABLE OUTPUTTABLE //定義與存儲(chǔ)結(jié)果數(shù)據(jù)表的接口,每個(gè)接口最多可以定義一個(gè)輸出塊。 RECORDSET =,; .FIELDS(字段序號(hào))=〈變量〉; | //或 WITH .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)存緩沖區(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ù)塊對(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)p Do- >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所示。“OTHER”表示知識(shí)庫(kù)中的其它知識(shí)數(shù) 據(jù)塊對(duì)象。 No Yes Yes No DATABASE EXCEL OTHER DATAFILE 圖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僅給出了程序的主要算法流程。在編程時(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ǔ)不同類型的數(shù)據(jù); struct InputDataBuffer *pNextDataValue;}; struct PremiseVariableBuffer //前提變量(自變量)集區(qū),接受來(lái)自數(shù)據(jù)庫(kù)的數(shù)據(jù) { CString VariableName; struct InputDataBuffer *pInputDataBufferHead;//指向數(shù)據(jù)區(qū)頭指針。 struct PremiseVariableBuffer *pNextVariable;//指向下一個(gè)變量。 }*pPremiseVariableBufferHead,pPremiseVariableBufferTail; 據(jù)此,可以繪制出知識(shí)庫(kù)從外部數(shù)據(jù)庫(kù)獲取數(shù)據(jù)的接口程序流程如圖4所示。 No Yes No Yes Yes Yes No Yes No No Yes No Yes No Yes 圖2 從外部數(shù)據(jù)文件獲取數(shù)據(jù)的接口函數(shù)程序流程 No Yes Yes No Yes No Yes No No No Yes Yes 圖3 數(shù)據(jù)庫(kù)接口程序?qū)崿F(xiàn)的總體流程 Yes Yes No No No Yes Yes No Yes No Yes No 圖4 從外部數(shù)據(jù)庫(kù)獲取數(shù)據(jù)的接口程序流程 3.2.2 輸出數(shù)據(jù)表接口程序的實(shí)現(xiàn) 輸出數(shù)據(jù)表用來(lái)存儲(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): struct 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 RecObjectName;//排序 可以減少打開記錄集的次數(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 *pNextConnecObjectName; }*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ī)在推理完成以后,通過(guò)指向結(jié)果變量緩沖區(qū)的 頭指針獲得整個(gè)鏈表的入口,將結(jié)果數(shù)據(jù)存入輸出數(shù)據(jù)表中。 4 結(jié)束語(yǔ) 本文開發(fā)的知識(shí)庫(kù)系統(tǒng)與外部數(shù)據(jù)源的接口作為生產(chǎn)成本管理知識(shí)庫(kù)系統(tǒng)開發(fā)工具的 重要組成部分,目前正在兩個(gè)不同類型的企業(yè)進(jìn)行試運(yùn)行,已經(jīng)收到了比較好的效果。 應(yīng)用實(shí)踐證明,該系統(tǒng)運(yùn)行穩(wěn)定可靠,接口描述定義格式簡(jiǎn)單實(shí)用。我們準(zhǔn)備將接口程 序轉(zhuǎn)為ActiveX DLL 組件形式,便于在不同的知識(shí)庫(kù)系統(tǒng)中使用,以獲得更好的效果。 參考文獻(xiàn) 1 Eugene Olafsen等著, 王建華等譯. MFC Visual C++6編程技術(shù)內(nèi)幕. 機(jī)械工業(yè)出版社, 2000年版 2 熊范綸等. 雄風(fēng)專家系統(tǒng)開發(fā)工具. 清華大學(xué)出飯社, 1999年版 3 王永慶. 人工智能原理與方法. 西安交通大學(xué)出版社, 1998年版 The Study on Interface of a Knowledge Base System and External DataSource Ma Jinping Xing jun (Manangement Department QingDao University , 266071) Abstract This paper discussed describe definition and program implementation method on interface of a Knowledge Base System and External DataSource. Key words Knowledge Base System DataBase DataSource ----------------------- 開始pCls=pClsHead pCls=NULL??? 終止 pDo=pCls->pFirstObject pDo=NULL? pDo->ObjectType=? pCls=pCls->pNextCls A B C pDo=pDo->pNextObject flag=MyFile.ReadStirng(mDataLine);nLine++; 顯示消息通知用戶存在錯(cuò)誤 在mDataLine中找Col列 Row=nLine? 將數(shù)據(jù)和VariableName采用 DataFIleBuffer結(jié)構(gòu)存入內(nèi)存 Flag=False? 在Ptl2->Text中,找出變量名稱 VariableName,行號(hào)(Row)和列號(hào)(Col);MyFile.SeekToBegin();Bool flag=MyFile.ReadString(mDataLine);設(shè)MyFile當(dāng)前行nLine=1; 在Ptl2->Text中是否存在“READ”和文件句柄名稱? pTL2pNextLine Ptl2->Text=”END DATAFILE”? 找到否? pTL1=pTL1->pNextLine 找出文件名稱、文件句柄名稱,并且打開數(shù)據(jù)文件(設(shè)對(duì)象名為MyFile)。Ptl2pNextLine 返回 nfind1>-1? pTL2=pTL1;nFind1=pTL2->Text。Find(”O(jiān)PEN”) pTL1->Text=”END DATAFILE” ? 定義變量、初始化pTL1=pDo->pTextLine pTL1=pTL1->pNextLine A B 定義變量、初始化pTL1=pDo->pNextLine pTL1=pTL1->pNextLine pTL1->Text=”END DATABASE” nFind1=pTL1->Text.Find(“CONNECTION”) nFind1>-1? pTL1=pTL1->pNextLine 返回 找出ADO連接對(duì)象名稱和連接字符串,并打開連接 pIT=pTL1-pNextLine;pOT=pTL1->pNextLine pIT->Text=”INPUTTABLE” pIT=pIT->pNextLine D pIT->Text=”END DATABASE”? pOT->Text=”O(jiān)UTPUTTAB?LE ” pOT=pOT->pNextLine E pOT->Text=”END DATABASE”? D pIT=pIT->pNextLine pIT->Text=”END INPUTTABLE”? pRec=pIT; 在pRec->Text中,查找記錄集對(duì)象名稱RecName、已經(jīng)打開的連接對(duì)象名稱conName, 找到否? pRec->Text=”END INPUTTABLE”? pRec=pRec->pNextLine 返回 pField=pRec->pNextLine 從pRec->Text截出SQL命令字符串,執(zhí)行。 在pField->Text中找RecName 找到否? pField=pField->pNextLine pField->Text=”END INPUTTABLE”? 在pField- >Text中截出變量名,并且存入PremiseVariableBuffer緩沖區(qū);截出字段序號(hào)nField RecName.GetadoEOF()? 將第nField字段值存入InputDataBuffer內(nèi)存緩沖區(qū) RecName.MoveNext()
0104023一個(gè)知識(shí)庫(kù)系統(tǒng)與外部數(shù)據(jù)源接口的研究(doc)
[下載聲明]
1.本站的所有資料均為資料作者提供和網(wǎng)友推薦收集整理而來(lái),僅供學(xué)習(xí)和研究交流使用。如有侵犯到您版權(quán)的,請(qǐng)來(lái)電指出,本站將立即改正。電話:010-82593357。
2、訪問(wèn)管理資源網(wǎng)的用戶必須明白,本站對(duì)提供下載的學(xué)習(xí)資料等不擁有任何權(quán)利,版權(quán)歸該下載資源的合法擁有者所有。
3、本站保證站內(nèi)提供的所有可下載資源都是按“原樣”提供,本站未做過(guò)任何改動(dòng);但本網(wǎng)站不保證本站提供的下載資源的準(zhǔn)確性、安全性和完整性;同時(shí)本網(wǎng)站也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的損失或傷害。
4、未經(jīng)本網(wǎng)站的明確許可,任何人不得大量鏈接本站下載資源;不得復(fù)制或仿造本網(wǎng)站。本網(wǎng)站對(duì)其自行開發(fā)的或和他人共同開發(fā)的所有內(nèi)容、技術(shù)手段和服務(wù)擁有全部知識(shí)產(chǎn)權(quán),任何人不得侵害或破壞,也不得擅自使用。
我要上傳資料,請(qǐng)點(diǎn)我!
管理工具分類
ISO認(rèn)證課程講義管理表格合同大全法規(guī)條例營(yíng)銷資料方案報(bào)告說(shuō)明標(biāo)準(zhǔn)管理戰(zhàn)略商業(yè)計(jì)劃書市場(chǎng)分析戰(zhàn)略經(jīng)營(yíng)策劃方案培訓(xùn)講義企業(yè)上市采購(gòu)物流電子商務(wù)質(zhì)量管理企業(yè)名錄生產(chǎn)管理金融知識(shí)電子書客戶管理企業(yè)文化報(bào)告論文項(xiàng)目管理財(cái)務(wù)資料固定資產(chǎn)人力資源管理制度工作分析績(jī)效考核資料面試招聘人才測(cè)評(píng)崗位管理職業(yè)規(guī)劃KPI績(jī)效指標(biāo)勞資關(guān)系薪酬激勵(lì)人力資源案例人事表格考勤管理人事制度薪資表格薪資制度招聘面試表格崗位分析員工管理薪酬管理績(jī)效管理入職指引薪酬設(shè)計(jì)績(jī)效管理績(jī)效管理培訓(xùn)績(jī)效管理方案平衡計(jì)分卡績(jī)效評(píng)估績(jī)效考核表格人力資源規(guī)劃安全管理制度經(jīng)營(yíng)管理制度組織機(jī)構(gòu)管理辦公總務(wù)管理財(cái)務(wù)管理制度質(zhì)量管理制度會(huì)計(jì)管理制度代理連鎖制度銷售管理制度倉(cāng)庫(kù)管理制度CI管理制度廣告策劃制度工程管理制度采購(gòu)管理制度生產(chǎn)管理制度進(jìn)出口制度考勤管理制度人事管理制度員工福利制度咨詢?cè)\斷制度信息管理制度員工培訓(xùn)制度辦公室制度人力資源管理企業(yè)培訓(xùn)績(jī)效考核其它
精品推薦
- 1暗促-酒店玫瑰靜悄悄地開 369
- 2終端陳列十五大原則 382
- 3專業(yè)廣告運(yùn)作模式 345
- 4****主營(yíng)業(yè)務(wù)發(fā)展戰(zhàn)略設(shè)計(jì) 375
- 5中小企業(yè)物流發(fā)展的對(duì)策 394
- 6主顧開拓 482
- 7主動(dòng)推進(jìn)的客戶服務(wù) 342
- 8專業(yè)媒體策劃與購(gòu)買 372
- 9中遠(yuǎn)電視廣告CF 417
下載排行
- 1社會(huì)保障基礎(chǔ)知識(shí)(ppt) 16695
- 2安全生產(chǎn)事故案例分析(ppt 16695
- 3行政專員崗位職責(zé) 16695
- 4品管部崗位職責(zé)與任職要求 16695
- 5員工守則 16695
- 6軟件驗(yàn)收?qǐng)?bào)告 16695
- 7問(wèn)卷調(diào)查表(范例) 16695
- 8工資發(fā)放明細(xì)表 16695
- 9文件簽收單 16695