网站首页 >> 2025 SIS 展示 >> 李跃新:关于专家数据库系统数据访问研究的
2025 SIS 展示
李跃新:关于专家数据库系统数据访问研究的回顾
关于专家数据库系统数据访问研究的回顾
李 跃 新
湖北大学计算机与信息工程学院 湖北 武汉4300062
摘 要:专家数据库系统是计算机专家系统的一个分支。它与当前的AI系统的数据访问策略差别很大。回顾这一段的历史,可以帮助我们做好原来的工作,又可以配合现在的AI研究走得更稳、更快。
关键词:专家系统;数据库系统;专家数据库系统,人工智能
作者简介
李跃新,男,67岁,教授,博士;计算机科学与技术专业;研究方向:智能系统、数据库系统;1983大专毕业,1989获得硕士学位,2006获得博士学位。1990-2018湖北大学任教。发表论文30多篇,其中国家核心期刊5篇,SCI期刊1篇,EI期刊3篇。获得湖北省科技进步3等奖1项,获得发明专利2项,参加国家自然科学基金项目2项,主持湖北省教育厅重点科研项目2项。邮电出版社和科学出版社出版专著各1部。省教育厅项目评审专家和省科技厅项目评审专家。
1 引 言
关系型数据库系统缺乏知识,只能处理静态数据,而专家系统的应用领域狭窄和不能访问现存数据库,又妨碍了专家系统的有效应用。数据库和AI这两个领域单独发展的局限性促使了两者取长补短,共同发展.这就是专家数据库系统 EDS(Expert Database System)产生和发展的原因。通常我们把既具有数据库管理功能及演绎能力、又提供专家系统中若干良好性能的数据库系统称为专家数据库.
EDS 的基本思想是把以知识表达和知识处理为主的专家系统 ES(Expert System)技术引进关系型数据库,使二者有机结合,以开发出能共享信息的面向知识处理的问题求解系统.目前EDS 主要采用系统耦合--“紧耦合”及“松耦合”来实现.紧耦合指将规则管理系统集成到 DBMS 之中使 DBMS 既管理数据库又管理规则库.这种方法实现难度较大.而松耦合是指将一个现成的专家系统外壳和一个现成的 DBMS作为两个独立的子系统结合在一起,它们分别管理规则库和数据库.采取松耦合实现策略可以充分发挥原有两个系统的全部功能而不需对原系统进行任何改动.它只需设计一个连接 ES/DBMS 的高效灵活的原接口模块以协调二者的工作。所以实现起来时间短、见效快。
CLIPS 是美国航空航天局约翰逊太空中心于1985年推出的基于 C 语言的专家系统开发平台它是一种知识工程语言最初的 CLIPS 是一种产生式语言现已具有产生式系统(基于规则)、框架结构、面相对象和过程式编程等知识表达方式.WXCLIPS 是CLIPS 的功能扩展,运行于 MS WINDOWS 和UNIX(或LINUX)X-WINDOWS 的图形化专家系统开发平台,并且支持 FUZZY 推理.
我们在开发项目的时候,采取松耦合的策略,选择文本文件和 MS SQL SERVER2000为 DBMS。以 CLIPS 和 WXCLIPS 为ES开发平台,研究了专家数据库系统的数据访问技术.下面分二节予以介绍.
2 文本文件数据库的操作
用文本文件作为专家数据库系统中的数据库它既可存放推理机所使用的规则知识,也可存放因推理所需的中间数据和结论数据,或其他待处理的数据.本文主要以存放数据为例论述我们的研究工作。
当处理的数据量较少时文本数据库的优点十分突出.
2.1 数据的结构化定义 因文本文件属流式结构,用文本文件存放数据时,为体现数据的关系特征和存取方便一般需进行结构化定义,进行结构化定义时每个字段之间至少要一个空格,一个字段内部不能有空格.如定义配置个人计算机数据库中的产品表有4处字段:品名、型号、价格、档次.文件的内容如下:
品名 型号 价格 档次
cpu P41.7G/478 1750元 1
cpu P41.7G/423 1630元 1
mainboard 华硕 P4E/478 1620元 1
mainboard LNTEL850MV/478 1600元 1
…
2.2 文件的基本操作
(1)打开文件
(open<file-name><file-id>[<file-access>])
其中<file-name>为文件名字符串(包括完整路径)当缺省路径时默认主程序所在目录<file-id>为文件逻辑名以后访问文件可用直接引用逻辑名<file-access>为文件存取方式字符串此项可以缺省主要有以下4种存取方式.“r”:只读方式缺省方式;“r+”:读或写方式以覆盖方式写数据.以上两种方式文件必须存在否则打开失败.“w”:只写方式当文件不存在时新建一个空文件当文件存在时以覆盖方式写数据.“a”:追加方式当文件不存在时新建一个空文件当文件存在时以追加方式写数据.
(2)对文件进行读操作(read [<logical-name>])
从具有逻辑名<logical-name>的文件中读取一个字段(不同的字段用空格隔开);若成功则返回;读取字段;否则返回 EOF.
(read [<logical-name>])从具有逻辑名<logical-name>的文件中读取一个一行;若成功则返回读取的行;否则返回 Eof.
(3)对文件进行写操作 (printout <logical-name><expression>∗)对<expression>∗求值无格式输出到具有逻辑名<logical-name>的文件中.(format<logical-name><string-expression><expression>∗)对<expression>∗求值按照<string-expression>规定的格式输出到具有逻辑名<logical-name>的文件中.
(4)关闭文件
(close [<logical-name>])
关闭逻辑名为<logical-name>的文件(若没有指定则指所有文件)如果成功返回 True否则返回False。
2.3 文件的基本操作的应用
实例1 将已经存在的事实按一定格式写到文件中(添加数据).(程序略)
由于 clips 的文件是流式文件,文件指针自动移动,且不支持删除或修改指定行.因此删除数据的思想是:先将要删除数据之前的数据写到另外一个文件,再将要删除数据之后的数据写到另外一个文件,然后将此文件以覆盖的方式写回到原文件.修改数据也可采用类似思想.
实例2 修改数据.
将文件中 name 为?namepara 的行kind 修改为?kindpara、price 修改为?pricepara、level 修改为?levelpara(deffunction updatedata(?namepara?kindpara?pricepara?levelpara)
(open“pc.txt”pc“r”)(程序略)
3 用 ODBC 的数据库操作
WXCLIPS 支持以 ODBC 方式访问数据库,操作更方便,适合处理数据量较大的应用.下面将讨论数据访问的基本函数并通过实例介绍它们的使用.
3.1 基本函数
(1)创建数据库
(database-create)
创建一个数据库,创建成功后返回这个数据库的 id 号.
(2)打开数据库
(database-open long id string datasource optional long exclusive=1optional
string readonly=1optional string username=“ODBC”optional string password=″″)
它的若干参数是:数据库的 id独占性(0或1)只读性(0或1)数据源名用户名password.成功就返回1.
(3)关闭数据库
(database-close long id)
成功就返回1.
(4)删除数据库
(database-delete long id)
成功就返回1.创建一个数据集
(5)执行一条 SQL 命令 long(recordset-execute-sq1long id string sq1)
将结果放到数据集中成功就返回1.
(6)删除一个数据集 long(recordset-delete long id)
成功就返回1.
3.2 记录集操作函数 string(recordset-get-char-data long id string-or-long col)
从数据集中取出当前记录的一个字符型记录项.为数据集 idcol 为第几项记录.recordset-get-float-
data 取得浮点型记录项.recordset-get-int-data 取得整型记录项.
long(recordset-is-eof long id) 当记录结束时返回1.
long(recordset-is-bof long id) 当记录起始时返回1.
long(recordset-move-first long id) 将指针移到第一条记录.
long(recordset-move-last long id) 将指针移到最后一条记录.
long(recordset-move-next long id) 将指针后移一条记录.
long(recordset-move-prev long id) 将指针前移一条记录.
(database-get-error-message id) 取得数据库操作错误信息.id 为数据库 id
3.3 数据库操作的应用
实例1 从数据库中读一条数据(用函数实现).
定义函数: (deffunction find(?sq1?result)
(bind?database(database-create));创建数据库和打开数据源
(if(eq0(database-open?database“pcbase”10“sa”))then
(bind?msg(database-get-error-message ?database))
(printout t?msg crif)
(return0)) ;创建数据集
(bind ?recordset(recordset-create ?database“wxopen-type-snapshot”))
(bind ?sq1(str-cat ?sq1)) ;构造 SQL 语句
(if(eq0(recordset-execute-sq1?recordset?sq1?)then;执行 SQL 语句
(bind?msg(database-get-error-message ?database))
(printout t?msg crif)(return0))
(bind?data(recordset-get-char-data?recordset?result);获得符合条件的第一条记录
(recordset-delete?recordset)
(database-close?database)
(database-delete?database)
(return?data))
调用函数:(find “select∗from mypc” 1)
实例2 更新数据(用函数实现).
定义函数:(deffunction updatepc(?result1?result2?result3)
(bind?database(database-create)) ;创建数据库和打开数据源
(if(eq0(database-open?database“pcbase”10“sa”))then
(bind?msg(database-get-error-message ?database))
(printout t?msg crif)
(return0)) ;创建数据集
(bind ?recordset(recordset-create ?database“wxopen-type-snapshot”))
(bind ?sq1(str-cat “updata mypc set xh=?result1price=?result2 where pp=?result3″″))
(if(eq0(recordset-execute-sq1?recordset?sq1?)then ;执行 SQL 语句
(bind?msg(database-get-error-message ?database))
(printout t?msg crif)(return0))
(recordset-delete?recordset)
(database-close?database)
(database-delete?database))
调用函数:(updatapc “三星17”“1720”“videoplay”)
4 结束语
专家系统与数据库系统结合的专家数据库系统,使专家系统有更加广阔的应用天地,也使数据库处理有知识的指导,对基于知识的数据库挖掘有指导意义.文中提到的文本文件适合于小型数据处理不需要大型数据库作后台支持,但各种数据库操作需要编程实现,而采用 ODBC 方法不存在此问题.当然, 过去的工作还可以深入,如数据库中存放规则、实现逆向推理时如何使用数据库使 CLIPS 程序正确推理等。这些值得结合当前AI的发展,在今后继续研究。
参考文献:
[1] Joseph GiarratanoGary Rilay.专家系统原理与编程[M].印 鉴刘星成汤 庸.北京:机械工业出版社2001.
[2] 缪建兰郭 盈.我校学报论文的引文统计分析[J].情报科学199917(2):188~192.