在CLIPS中,知识的表示有三种方式:
1、规则,规则表示法是基于启发式经验知识库的首要选择。
2、自定义函数和通用函数,这种方式是程序式知识表示的首选。
3、面向对象设计,也是程序式知识表示的首选。面向对象的程序设计被支持的5个普遍接受的特征是:类,消息处理函数,抽象,封装,继承和多态性。模式匹配可以是对象和事实。
你可以仅用规则,或者仅用对象或者两者混合使用来开发软件。
CLIPS同时支持与其他语言的集成,如C和Java。事实上,CLIPS是C Language Integrated Production的缩写。规则能基于事实与对象的匹配,规则和对象同时组成了一个集成系统。除了被当作一个独立的工具之外,CLIPS还能被程序语言调用,运行其函数,然后返回给调用函数控制权。同样的,程序代码也能作为一个外部函数在CLIPS中被定义和调用。当外部代码执行完毕后,控制权返回到CLIPS。
Jess(Java Expert Shell System)是基于Java语言的CLISP推理机。
Jess(CLIPS)的优点是:推理机是开放的,用户提供不同的规则系统,就可以进行不同领域的推理工作,用户可以对推理机的推理能力进行扩展。但,作为前向推理系统,Jess用空间换时间,推理会产生大量的中间数据,空间效率很低;同时,由于Jess(CLIPS)是通用推理引擎,不可能提供针对各种具体领域的优化能力,使得这种推理机制的效率很难优化。
现在,针对本体的推理,越来越多地集中在了几种标准的本体语言上,如OWL、DAML、RDFS/RDF等,这样,研究者给出效率更高的,针对这些具体应用的推理机。象RACER、FaCT、Pellet等就是这类具体有强烈针对性的推理机。它们的优点是:效率很高,使用上也非常方便;缺点是:不是通用推理机,将推理能力限定在几种具体的本体语言上,而且用户很难对它进行扩展。
值得强调的是,RACER、FaCT、Pellet采用描述逻辑作为理论基础,算法采用Tableau算法。这些系统都做了大量的优化工作。
Jena是面向语义Web的应用开发包,包含的内容比较全面,推理机只是其中一部分。Jena提供的推理机也和RACER、FaCT、Pellet等一样,是针对本体的推理机,但Jena本身并不是‘推理机设计专家’,它自身包含的推理机基本上就是一种CLIPS配合本体领域产生式规则的前向推理系统。因此,它的运行效率不是很高。好在现在有DIG接口,DIG有点象数据库中的ODBC,允许前端挂接到后台不同的推理引擎上。这样,在Jean中,
也可以使用RACER、FaCT、Pellet这样更‘专业’些的推理机。
Pellet是一种基于Tableau算法的描述逻辑推理机,由美国马里兰大学(College Park分校)的MindSwap实验室开发。Pellet是基于Java的开放源码系统。
综上所述,可做如下区分:
1. Jena中的推理引擎和RACER都是针对具体本体语言的推理机,针对性强,效率高。
2. Jess是层面更低的,通用的CLIPS推理机。
这就可以解释:为什么当用户使用owl表示本体时,Protege会用Jena或RACER等推理,而当用户使用class/slot表示本体时,Protege仅能使用Jess。其实,从能力上,Jess也可以完成owl推理(需要输入相应的产生式规则库),只是效率低。