Protege4.0 使用说明
OWL-Lite
它是 OWL 中句法最简单的一种子语言。
对于简单的继承或者约束,它就显得非常适用。
一般用于合并同类字典和简单继承。
lite 是清淡的意思
OWL-DL
OWL-DL 较之 OWL-Lite,它的表达能力加强了。是基于描述逻辑的(Description Logics),所以以 DL 后缀。
正是因为有了描述逻辑,使自动推理成为了可能。
凡是遵循 OWL-DL 规范的本体都有可能自动计算类的继承性和检测本体之间的矛盾。因此一般用于要推理本
体之间的某种关系或者验证本体是否存在矛盾性,比 OWL-Lite 更进了一步。
这个教程就是基于 OWL-DL 的。
OWL-Full
OWL-Full 是最具有表达能力的子语言了。
它适用于高表达性的场合,如果要把一个事物完整的、精确的、力求无二义性地表达出来,它就非常适用。
但正因为它把约束定义太死,所以已经不适合做推理了,一旦推理,会出现大量的矛盾,也不适合进行合并
工作,因为它很难与别的本体兼容。
如何选择你需要的子语言
以下 2 个建议你可以参考下
选择 Lite 还是 DL,在于你觉得用 Lite 来创建本体,是否已经够用。
选择 DL 还是 Full,在于你觉得是自动推理更重要,还是精确表达更重要。DL 使建模更灵活,Full 使建模更完
整更精确、表达力更强。
注意:Protégé 4 在编辑 DL 和 Full 的时候并没有什么明显区别,尺度把握在你自己心目中。
OWL 本体的重要组成部分
在早期的 Protégé版本中,你们会发现这样的术语,Protégé frames Instances, Slots and Classes,3 个重要的部分是:
Instances、Slots、Classes,其实就对应 OWL 本体中的如下三个部分,它们是:
Individuals
个体。代表一个领域里面的对象。可以理解成一个类的实例(instances of classes)。
比如在工人这么一个类中,小李、老王、阿三等人就是一个一个的 Individual。
Properties
Properties 翻译为属性的意思。但是它的真正含义不和面向对象编程语言中的属性一样,它的真正含义是 2 个个体之间
的双重联系,或者可以认为是 2 个 Individuals 之间的桥梁。
比如,hasChild 连接了老李和他的孩子狗剩这 2 个个体。
另外,Properties 还有 3 个比较重要的特性,functional,transitive,symmetric,会在第四章详细介绍。
Classes
在 OWL 中 Classes 被翻译成个体的集合。当然它是一系列概念的语义表达,和编程语言中的类非常相似,有继承体系,
如果是 OWL-DL 版本还能推理出一些继承关系,后面会提到。
Class Axiom
在 OWL 中,类的公理是非常重要和关键的一部分,它在验证一致性和推理中发挥着巨大的作用。
Class Expression
类的表达非常为之丰富,有并交补类还是匿名类等等,后面章节将会重点讲述。
打开披萨饼的例子
打开 Protégé,经过黑屏白字一番加载后,出现了 3 个选项的对话框。
我们选择打开一个网上已有的实例——open OWL ontology from URI
系统会给出我们它内建的一些书签,我们选择 pizza.owl 那个本体。
选择之后要保证你的网路是 OK 的,耐心等待一段时间后,Protégé的界面就出来了
如果你发现你的 Protégé版本和我说的不一样,点第二章,里面有下载。
我们看软件界面图,最重要的几个版面就是,Classes,Object Properties, Data Properties, Individuals。
你们可以大致点进去看看。一进去的版面叫 Active Ontology,是这个本体的统计信息。
这里例子让你熟悉下 Protégé的界面,下面我们开始自己构建本体。
在创建本体的时候,用的最多的当然是第一种方法————Named Class。这种 Class 也被称为 Plain Class,意思就是
没有任何语义的类,仅仅是一个标示。好了,我们开始!
打开 Protégé,这次我们要选第一个选项了,就是自己去创建本体。
接着要你输入 URI,就是世界上唯一的地址,作为我这个本体的标示。这里我们填
http://www.crabone.com/ontologies/organization.owl,注意这种规范的写法是很重要的。这是 RDF 的知
识点了,我就不啰嗦了,有兴趣朋友看这里 RDF 入门教程
之后就选择这个本体,我们本体存放的位置。
点击 Finish 之后,我们实际上已经创建了一个空的本体了。而且 Protégé已经为你创建了 RDF/XML,你可以
去看看你保存着的 OWL 文件,表示形式为:
]>
1.
2.
3.
4.
进来之后,我们选择 Classes 那个面板,开始建立出下面这样的一棵树。
这棵树是由一些“兴趣爱好”这样的类组成的,一个社团有什么样的兴趣爱好,就将会是什么样的社团,当
然一个社团也可以有多个兴趣爱好。至于上图的操作我想就没必要讲了,重点要讲述的是大家在建模的时
候要分清什么是分类,什么是继承。
继承:只要学过面向对象编程的朋友都熟悉这个概念,在 RDF 和 OWL 里父类与子类的关系,远远没有 OOP
里面那么玄乎,我们来看 W3C 上的语法描述:
if
T(?c1, rdfs:subClassOf, ?c2)
T(?x, rdf:type, ?c1)
then
T(?x, rdf:type, ?c2)
意思就是如果 C1 是 C2 的子类,并且有一个实体或者类是属于 C1 的,那么它也属于 C2。记住!推理机就
只明白这点,仅此这么简单!
分类:这里指的分类其实就是上面的继承,一模一样!但是我们在建模的时候并没有把这些分类的类当作本
体中的关键元素,而是属于辅助类。辅助什么?辅助我们建模,并不是辅助推理机,有了这些辅助类可以
使我们的类机构图更加清晰,我这里举个例子,见下图:
我们可以看到这里多了几个类,我们来看哪些是分类关系,哪些是继承关系。这里的 Thing 下面有一个分
类叫 Interest,Interest 下面有 3 个被继承的子类,其中的 NamedInterest 就是典型的辅助类,也可以称为
分类类,因为 NonMusic 和 MusicAndFootball 是一类兴趣爱好,我们暂且称为复合型的爱好,还有 4 个就
叫做纯种爱好,或者原始爱好。而 NamedInterest 的作用就是为了建模的时候有个清晰的建模思维,让建
模更具有逻辑性和条理性,但是 NamedInterest 这种类将不会对推理起到任何作用,它仅仅是借用了
SubClassOf 公理(后面章节将会详述)来作为辅助的。
Disjoint Classes
DisjointClasses、SubClassOf、EquivalentClasses 是类的三大公理,见下图:
SubClassOf 已经在上一节讲过了,EquivalentClasses 和推理密切相关,在下面的章节将会讲述,
DisjointClasses 则是为了让推理能够顺利进行的一个必要条件,没有它的显式声明,有些推理将无法运行。
可以说,在 OWL 里面 DisjointClasses 无处不在,这也是和我们的思维非常不一样的。因为我们在 UML 中
的类,OOP 中的类,都不需要申明它们之间的关系,类与类之间要么是父子关系,要么没有任何关系,一
个对象只能是一个类的实例,比如 JAVA 中
String tempStr = new String();
这里的 tempStr 就是类 String 的实例,不存在类似于
String int temp = new String() or int(乱写的);
这样的形式,既是 String 又是 int 的类型。然而,在 OWL 中,一个实例可以既是这个类的实例,又是其他
类的实例,比如下图:
上面有 2 个集合,这里的集合就好比类,集合里面的小块块就是这个类的实例。从这个图里,我们可以读
出那几个类呢?
A、B、A∩B、A∪B...还有很多比如:非 A、A 和 B 的交集的补集等等,我这里公式不打了,这些都是一
个个的类
那么在上面这些类中的小块块,就是属于这个类的个体,也叫实例,我们发现,有些小方块可以属于很多
类,比如中间的那些,既是属于 A 的,又是属于 B 的,也可以属于(A∪B),也可以属于……总之可能会
属于很多类。
在这里,我们可以进行一个小小的总结了:
OWL 中的类,和 OOP 中的类并不一样,只有继承上来说,是类似的,但我们更应该把这些类当作集合
来考虑!
看到这里,我想大家就应该明白 DisjointClasses 的意思了,是的!为了声明 2 个类没有交集!!只要 2 个
类没有了交集,那么就不存在一个个体同时属于这 2 个类的情况了,这样推理机可以更加准确无误地表达
出我们的意思了。
那么什么样的类需要去申明 DisjointClasses 呢?答案:同一层次的类!这里涉及到一个模式,叫做 Upper Level
Ontology
这个设计模式给了我们建模一个指导规范:将本体里面的类先按照层次划分,然后将一个层次的类相互
DisjointClasses。我们还是以我们的社团本体来举例: