一个知识库系统和外部数据源接口的研究_第1页
一个知识库系统和外部数据源接口的研究_第2页
一个知识库系统和外部数据源接口的研究_第3页
一个知识库系统和外部数据源接口的研究_第4页
一个知识库系统和外部数据源接口的研究_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一个知识库系统与外部数据源接口的研究 马金平 邢筠(青岛大学商学院管理系, )摘要 本文论述了一个知识库系统与外部数据源接口的描述定义和程序实现方法。关键词 知识库系统 数据库 数据源1 引言随着智能决策支持系统应用领域的不断扩大,原来由模型库系统完成的部分定量分析任务,将归并到知识库系统中。即要求知识库中,不仅有专家的定性知识,而且也应该具有计算知识,形成一个广义的知识库系统。在广义知识库系统中,要求推理机不仅要具有一般的推理功能,而且能够从外部数据源获取数据,对数学模型进行求解的功能。如何从外部数据源获取数据,是使推理机具有模型求解功能的关键技术之一。笔者在生产成本管理知识库系统的开发过程中,使用Visual c+6.0 成功地研究开发了该知识库系统与外部数据源的接口,拓宽了推理机的功能,收到了比较好的效果。外部数据源主要是指文本数据文件、数据库和Excel电子表。由于受篇幅限制,本文主要针对知识库系统与文本数据文件、数据库接口的设计实现问题进行讨论。知识库系统与Excel电子表的接口问题,笔者将另撰文介绍。2 接口的描述定义在生产成本管理知识库中,以知识数据块的形式对外部数据源进行如下描述定义。2.1 文本数据文件接口的定义格式 DATAFILE /可以定义多个文件的接口。 =OPEN()/在一个接口中,可以定义任意个输入数据文件。 =READ(,行号,列号)/可以有多行。 | /或 WITH =READ(行号,列号) /可以有多行。 END WITH END DATAFILE 2.2数据库接口的定义格式 DATABASE /在一个知识库中可以定义多个这样的接口 CONNECTION = /可以同时定义多个连接对象 INPUTTABLE /每个接口只能定义一个输入块。 RECORDSET =,CONNECTION /可以定义多个记录集对象名。 变量=.FIELDS(字段序号)/可以有多行 | /或 WITH ADO记录集对象名 =.FIELDS(字段序号) /可以有多行 END WITH END INPUTTABLE OUTPUTTABLE /定义与存储结果数据表的接口,每个接口最多可以定义一个输出块。 RECORDSET =,; .FIELDS(字段序号)=变量; | /或 WITH FIELDS(变量序号)=; END WITH END OUTPUTTABLE END DATABASE在上述格式中,变量是指计算表达式及模型中需要用户提供值的参数,或存储表达式及模型的求解结果。“/”表示注释。此外,笔者在生产成本管理知识库系统开发工具中,开发了知识库与外部数据源接口定义的辅助工具,用户利用这些工具可以十分方便地完成接口的描述定义工作。3 接口程序的实现在推理机运行之前,首先将知识库读入内存,并且转换成计算机的内部表现形式。接口程序再根据知识库与外部数据源接口的定义,将外部数据源的数据读入内存缓冲区后,最后在进行推理。为了便于查找知识库与外部数据源接口的定义语句,首先定义如下数据结构:struct LineText /存储知识库语句行文本。 CString Text;/存储知识库语句行文本struct linetext *pNextLine;/下一行指针 *pLineTextHead; /知识库语句首行指针。struct DataObject /知识数据块对象索引表 CString ObjecType;/对象类型struct LineText *pTextLine;/对象首行在LineText中的指针struct DataObject *pNextObject;/指向下一个知识数据块对象。struct KnowClsName /存储知识类名称定义语句文本 CString ClsName;/知识类名称struct KnowClsName *pNextCls;/下知识类名称的指针struct LlineText *pTextLine;/知识类名称在LineText中的指针struct DataObject *pFirstObject;/指向知识类中第一个知识数据块对象的指针struct Method *pFirstMethod;/指向知识类中第一个知识方法的指针*pClsHead;/指向知识类的头指针。根据上述数据结构的定义,接口程序总体实现的程序流程如图1所示。在图1中,当pDo-ObjectType等于“DATAFILE“或“DATABASE”或“EXCEL”时,系统分别调用从文本数据文件、数据库和EXCEL电子表获取数据的接口函数。其中:文本数据文件接口函数的程序流程如图2所示,数据库接口函数的程序流程如图3所示。“OTHER”表示知识库中的其它知识数据块对象。开始pClspClsHead终止pDo=pClspFirstObjectpCls=NULL?? No Yes pDoObjectType=?pDo=NULL? Yes No pCls=pClspNextCls AB C DATABASE EXCEL OTHER DATAFILEpDo=pDopNextObject 图1 接口程序总体实现的程序流程 3.1 数据文件接口函数程序的实现为了存储从外部数据文件获取的数据,定义如下数据结构:struct DataFileBuffer /数据文件缓冲区 CString VariableName;/变量名称 double DataValue;/从文本文件获取的变量值 struct DataBuffer *pNextPata;/指向下一个变量的指针*pDataBufferHead,*pDataBufferTail;/缓冲区的头指针和尾指针。据此,绘出从外部数据文件获取数据的接口函数的程序流程如图2。由于受篇幅限制,图2仅给出了程序的主要算法流程。在编程时,还必须考虑具体实现的细节,例如:如何从一个数据行中,确定数据项数量,找到Col列;如何创建DataFileBuffer的链表结构等。3.2 数据库接口函数程序的实现 根据上述知识库与数据库接口的定义格式以及知识库内部存储结构,可以绘制出数据库接口函数程序总体流程如图3所示。其中:D表示输入数据表接口程序流程,如图4所示;E表示输出数据表接口程序流程。3.2.1 输入数据表接口程序的实现为了存储从输入数据表获取的数据,定义数据结构如下: struct InputDataBuffer /存储从数据库获得的数据,每一个变量建立一个数据区 _variant_t DataValue;/可以存储不同类型的数据;struct InputDataBuffer *pNextDataValue;;struct PremiseVariableBuffer /前提变量(自变量)集区,接受来自数据库的数据 CString VariableName;struct InputDataBuffer *pInputDataBufferHead;/指向数据区头指针。struct PremiseVariableBuffer *pNextVariable;/指向下一个变量。*pPremiseVariableBufferHead,pPremiseVariableBufferTail;据此,可以绘制出知识库从外部数据库获取数据的接口程序流程如图4所示。 ApTL2=pTL1;nFind1=pTL2-Text。Find(”OPEN”)定义变量、初始化pTL1=pDopTextLinepTL1=pTL1pNextLine nfind1-1? No YespTL1Text=”END DATAFILE” ?找出文件名称、文件句柄名称,并且打开数据文件(设对象名为MyFile)。Ptl2pNextLine No Yes 返回 Ptl2-Text=”END DATAFILE”? Yes pTL1=pTL1-pNextLine Yes pTL2pNextLine在Ptl2-Text中,找出变量名称 VariableName,行号(Row)和列号(Col);MyFileSeekToBegin();Bool flag=MyFileReadString(mDataLine);设MyFile当前行nLine=1; 在Ptl2-Text中是否存在“READ”和文件句柄名称? No Yes No Flag=False? No Yes 在mDataLine中找Col列Row=nLine? 显示消息通知用户存在错误 No Yes flag=MyFile.ReadStirng(mDataLine);nLine+;找到否? No 将数据和VariableName采用DataFIleBuffer结构存入内存 Yes 图2 从外部数据文件获取数据的接口函数程序流程BnFind1=pTL1-TextFind(“CONNECTION”)定义变量、初始化pTL1=pDopNextLinepTL1=pTL1pNextLinenFind1-1? No 找出ADO连接对象名称和连接字符串,并打开连接 YespTL1-Text=”END DATABASE” pIT=pTL1-pNextLine;pOT=pTL1-pNextLine Yes No 返回pIT-Text=”INPUTTABLE” pTL1=pTL1-pNextLine pIT=pIT-pNextLineD Yes pOT=pOT-pNextLine NopOT-Text=”OUTPUTTAB?LE ”pIT-Text=”END DATABASE”? Yes No EpOT-Text=”END DATABASE”? No No Yes Yes 图3 数据库接口程序实现的总体流程 D返回 pIT=pIT-pNextLine pRec-Text=”END INPUTTABLE”? Yes pIT-Text=”END INPUTTABLE”? Yes No No pRec=pIT; 在pRec-Text中,查找记录集对象名称RecName、已经打开的连接对象名称conName, 找到否?pRec=pRec-pNextLine No 从pRec-Text截出SQL命令字符串,执行。 Yes 在pField-Text中找RecNamepField-Text=”END INPUTTABLE”? Yes pField=pRec-pNextLine 将第nField字段值存入InputDataBuffer内存缓冲区RecNameMoveNext() No pField=pField-pNextLine找到否? Yes No Yes RecName.GetadoEOF()?在pField-Text中截出变量名,并且存入PremiseVariableBuffer缓冲区;截出字段序号nField No 图4 从外部数据库获取数据的接口程序流程3.2.2 输出数据表接口程序的实现 输出数据表用来存储推理机对表达式或模型的求解结果。因此,需要在推理机运行之前,根据输出数据表接口描述的定义,准确地建立结果变量与打开数据表的记录集对象之间以及记录集对象与连接对象之间的链接关系,使得推理完成后,系统能够正确地连接数据库和打开数据表,将求解结果存入到数据表中。为此,定义如下数据结构:struct OutputDataBuffer/推理机将结果写入该区域 CString ConclVariableName;/推理完成以后,按变量名称排序 _Varian_t DataValue;/可以存储不同类型的数据; struct OutputDataBuffer *pNextDataValue;*pOutputDataBufferHead,*pOutputDataBufferTail;struct ConclVariableBuffer /结果变量缓冲区 CString VariableName; CString ConObjectName;/排序 可以减少连接数据库的次数 CString RecObjectName;/排序 可以减少打开记录集的次数 int nField;/字段序号 struct OutputDataBuffer *pOutputDataBuffer;/指向输出数据区的指针 struct ConclVariableBuffer *pNextVariableName;*pConclVariableHead,*pConclVariableTail;struct ConnecObjectName /连接对象缓冲区 CString ObjectName; CString ConnectionString; struct ConnecObjectName *pNextConnecObjectName; *pConnecObjectNameHead;struct RecObjectName /记录集对象缓冲区 CString ObjectName;/记录集对象名称 CString RecString;/SQL语句字符串 struct RecObjectName *pRecObjectName; *pRecObjectNamehead;程序实现流程与图4相类似,不同之处是:在初始化阶段,不需要连接数据库和打开数据表,将找出的结果变量与打开数据表的记录集对象之间以及连接对象之间的对应关系,存到上述结构所定义的链表中。推理机在推理完成以后,通过指向结果变量缓冲区的头指针获得整个链表的入口,将结果数据存入输出数据表中。 4 结束语本文开发的知识库系统与

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论