Protégé基本教程

Q&A

  1. 为什么protege里面owlviz tab中所有的东西都缩在左上角?
    因为没有安装graphviz,首先在官网(官网下载地址)下载grahviz,下载好以后安装。
    然后在protege里面点击file-preferences-owlviz里面,修改graphviz的地址就好了。
    Protégé基本教程_第1张图片

一、前言

参考文档:Protégé4OWL官方入门教程
因为在网上看到的教程使用的Protégé版本比较老了,而且是英文的,这里做一个整理。

Protégé软件是斯坦福大学医学院生物信息研究中心基于Java语言开发的本体编辑和知识获取软件,或者说是本体开发工具,也是基于知识的编辑器,属于开放源代码软件。这个软件主要用于语义网中本体的构建,是语义网中本体构建的核心开发工具,现在的最新版本为5.5.0版本。
Protégé提供了本体概念类,关系,属性和实例的构建,并且屏蔽了具体的本体描述语言,用户只需在概念层次上进行领域本体模型的构建。

Protégé下载地址

现在下载到的Protégé一般是一个压缩包,压缩包解压之后有Protege.exe和run.bat这两个文件,点击任何一个都可以打开Protégé。
Protégé一打开的界面主要是Active Ontology这个Tab的界面。
Protégé基本教程_第2张图片
本体的名字可以在Ontology IRI里面修改。
Annotations是注释栏,可以对本体添加一些信息注释或者描述。
右边Ontology metrics会显示一些本体中相关元素的统计信息。

二、开始建立一个新的本体

建立本体主要在Entities这个Tab的界面下完成。一个最简单的本体需要完成类和对象属性的定义。
Protégé基本教程_第3张图片

1. 类的建立

Protégé基本教程_第4张图片

类的添加、删除是在Class这个Tab下面完成的。Thing类是表示包含所有个体的集合的类。 因此,所有类都是Thing的子类。关于类,主要有三个操作:
Protégé基本教程_第5张图片
需要注意的是,类的命名不可以重复。另外Protégé目前的版本对中文的兼容性还算比较高,但有些时候还是会出现中文显示为□的情况。在使用的过程中,推荐优先使用英文命名。通过类的操作,我们可以建立“Pizza(比萨)”,“PizzaBase(比萨饼底)”,“PizzaTopping(比萨饼面)”三个类。
Protégé基本教程_第6张图片

在Class这个Tab界面的右下方是类的描述栏,相当于是对已有的类加一些限制。
比如,对于某一个实例来说,它要么是PizzaBase,要么是PizzaTopping,这样就可以设置“Disjoint with”的关系,说明这两个集合是不相交的。
Protégé基本教程_第7张图片

那么如果发现某一个实例既是PizzaBase,又是PizzaTopping,这种情况就是不允许的。这样的操作保证了类的严谨性。

接着,可以通过增加子类的操作完善本体的框架。比如比萨的饼底有薄饼和厚饼,比萨的饼面也有不同的口味。这样类之间的继承就是所谓的分类法。
Protégé基本教程_第8张图片
如果在编辑的过程中,类的层级关系不小心弄错了,不需要删除之后再重新编辑;可以拖动这个类到它应处于的层级,类似于文件夹的操作。如果拖动了某个类,它的子类也会随之移动,但不会改变这个类及其子类的层级关系。
如果类的名字写错了,可以右键选择“Change IRI Name”进行更改

如果需要增加很多个子类,可以右键点击该类,选择“Add Subclasses”。
Protégé基本教程_第9张图片
在空白大框内输入要建立的子类的名字,以回车为分隔,就可以一键完成子类的建立。点击“Continue”,可以看到以这种方法建立的子类默认是均不相交的集合。
Protégé基本教程_第10张图片
点击“Finish”即可完成创建。

在本体中,类和子类的关系可以这么理解:就拿上面的例子来说,DeepPanBase中所有的实例,都是PizzaBase的实例,这个关系是随着子类(SubClass-of)这个关系的定义而自然存在的;也就是说在实例化的时候,我们只需要说明这个实例是DeepPanBase即可。

2. 对象属性(Object Property)

2.1 对象属性的建立

在本体中定义了两种类型的属性——对象属性(Object Property)和数据属性(Data Property)。

Object properties are relationships between two individuals.
Datatype properties describe relationships between individuals and data values.

我们知道,本体或者语义网最基础的元素是(s,p,o)三元组,前面提到的类的定义方式可以看作是s和o的定义方式,这里这个对象属性就是p的定义。

对象属性和数据属性的定义可以这么理解:假如有一对夫妻小红和小绿,那么我们可以先定义两个类——男人、女人;小红是类“女人”的一个实例,小绿是类“男人”的一个实例。之后我们可以定义小红和小绿之间的夫妻关系,这个关系就是对象属性“夫妻”。同时我们又知道小红今年30岁,那么我们可以定义小红的一个数据属性“年龄”,属性值是“30”。
Protégé基本教程_第11张图片

和Class的界面类似,Object property的界面如下图所示。
Protégé基本教程_第12张图片

和Thing一样,topObjectProperty是所有属性的根节点。对属性的操作也是主要由三个button来完成。
Protégé基本教程_第13张图片
和类一样,对象属性的名字是不能重复的。同时在《官方手册》中也建议,在命名时为了方便管理,最好能够一目了然地反应对象属性所描述的关系。
如果是用英文命名,建议是第一个词用小写字母,每个词之间不用空格(因为空格可能会在编程的时候带来麻烦),从第二个词开始首字母大写(便于区分不同的词,能够更快地理解对象属性的含义);此外,《手册》还建议第一个小写单词尽量用is和has,因为这是最常见的对象属性。
如果是用中文命名,我感觉就是避免歧义就好了。
例子:
在这里插入图片描述
在定义对象属性的时候,一个比较重要的操作就是定义属性之间的互逆关系。比如“isParentOf”和“isChildOf”就是一对互逆的对象属性。互逆关系的定义是对本体关系的补充,也是推理过程的优化。
在这个例子中,可以先选择“hasTopping”,再点击“Inverse Of”旁边的“+”,创建对象属性“isToppingOf”就完成了一对互逆属性的定义。如果已经创建好了“isToppingOf”这个对象属性,那么可以在点击“+”之后弹出的对话框中选择“isToppingOf”这个对象属性即可。
Protégé基本教程_第14张图片

2.2 对象属性特性的定义

在定义对象属性的时候,我们还可以定义对象属性的属性特性,对对象属性作出更多的说明。这些特性可以用家庭成员之间的关系很好地说明。
Protégé基本教程_第15张图片

  • Functional
    Function我们都知道有“函数”的意思,在这里,Functional可以认为是函数中的“单映射”关系。如果一个对象属性的特性是Functional(单值的),那么对于某个实例来说,通过这个对象属性进行关联的实例有且仅有一个。

Functional properties are also known as single valued properties and also features.

Protégé基本教程_第16张图片
这是《手册》里面的例子,对“hasBirthMother”这个对象属性定义“Functional”的特性,那么“Jean hasBirthMother Peggy”和“Jean hasBirthMother Margaret”这两条事实可以推理得到“Peggy和Margaret是同一个人”这条事实。如果还有另外的事实表明Peggy和Margaret不是同一个人,那么将会导致矛盾。

  • Inverse Functional

Inverse Functional特性最重要的还是体现在Functional上,它的涵义是“该对象属性的逆属性是单值属性(single value property)”。

  • Transitive

Transitive定义了对象属性的传递性。下图是《手册》中的一个例子,假设对象属性“hasAncestor”具有“Transitive”的特性,如果已知“Matthew hasAncestor Peter”和“Peter hasAncestor William”,那么可以由“hasAncestor”的传递性推理得到“Matthew hasAncestor William”这一事实。
Protégé基本教程_第17张图片

  • Symmetric

Symmetric定义了对象属性的对称性。在家庭成员中,如果Matthew有一个兄弟姊妹(hasSibling)叫Gemma,自然Gemma也有一个兄弟姐妹(hasSibling)叫Matthew。我们可以定义对象属性“hasSibling”是对称的,那么我们只需声明一条事实,另一条事实因为对象属性的“对称性”而自然产生。

  • Asymmetric

非对称性也比较好理解,比如hasChild这个属性就不能定义为对称的。
Protégé基本教程_第18张图片

  • Reflexive

Reflexive定义的是对象属性的自反性,也就是自己和自己的关系。比如“know”(认识)这一对象属性,对于每个人来说,自己肯定是认识自己的。
Protégé基本教程_第19张图片

  • Irreflexive

Irreflexive定义的是对象属性的非自反性,也就是说这个对象属性不能描述实例自身到自身的关系。例如isMotherOf。
Protégé基本教程_第20张图片

对于某一个对象属性来说,可以定义一种或者多种特性,但是注意不要矛盾就行。比如《手册》中就有两个比较重要的提醒:

如果你定义了某个对象属性是可传递的,那么它的逆属性也应该是可传递的。
如果你定义了某个属性是可传递的,那么这个属性就不能是单值的。

If a property is transitive then its inverse property should also be transitive.
Note that if a property is transitive then it cannot be functional.

2.3 对象属性的Domains和Ranges

我们知道语义网可以看作是一张图,一条边联系的两个节点就是一个事实(或者成为一条知识),即(s,p,o)三元组,这条边就是对象属性。同时,这张图应该是一张有向图,那么每一条边都带有箭头指向性——这个箭头的起点称为对象属性的Domain(我通常叫做定义域),重点称为对象属性的Range(我通常叫做值域)。
值域和定义域和可以在Description里面进行选择和定义。
Protégé基本教程_第21张图片

在Pizza的这个例子里面,我们可以定义好这些属性的值域和定义域。如图所示:
Protégé基本教程_第22张图片

在Protégé中,是允许对象属性拥有多个值域的。
对于互逆的对象属性来说,对象属性的值域是其逆属性的定义域,对象属性的定义域是其逆属性的值域。

3. 利用对象属性描述类(类的约束)

对象属性实质上就是定义了类之间的关系,在定义了这些对象属性之后,可以利用这些属性来描述类;或者说,给定义好的类添加一些约束。

A restriction describes a class of individuals based on the relationships that members of the class participate in. In other words a restriction is a kind of class, in the same way that a named class is a kind of class.

在Protégé中,约束的定义可以在类的Description栏中找到:
Protégé基本教程_第23张图片

点击“+”,可以在Class expression editor里面手动输入,也可以在Object restriction creator里面选择。一些比较复杂的关系可以选择手动输入;一些比较简单的直接关系选择会比较快一点。

Protégé基本教程_第24张图片

这里要说明一下,在教程里面对类添加约束是在“SuperClasses”里面的,但是在Protégé最新的版本中,这些约束的定义是放在“SubClass Of”里面了。这是因为,这些约束实际上也是定义了一个隐含类,这个隐含类中的成员是满足这些约束关系的成员;而该类的成员均是这个隐含类的成员;也就是说,这个类是由约束形成的隐含类的子类。

在本体中,有三类约束:量词描述(Quantifier Restrictions),数量描述(Cardinality Restrictions),包含描述(hasValue Restrictions)。

3.1 量词描述(Quantifier Restrictions)

量词描述又可以被分为存在性量词描述(Existential Restrictions)和全称量词描述(Universal Restrictions)。

  • 存在性量词描述

存在性量词描述用关键字“some”来描述。在数学逻辑表达式中,存在性量词描述可以用符号“∃”表示。例如“hasTopping some MozzarellaTopping”表示“这个类存在Topping为MozzarellaTopping的成员”。其关系如下图所示:
Protégé基本教程_第25张图片

以MargheritaPizza为例,MargheritaPizza(玛格丽特比萨)是以自发粉、小西红柿为主要材料的一款菜品,调料是初榨橄榄油、荷兰撒拉米等。我们可以来梳理一下MargheritaPizza与其它类之间的关系。

  • MargheritaPizza的Topping可以是TomatoTopping或者MozzarellaTooping。
  • MargheritaPizza有很多种饼底。

这样,可以对MargheritaPizza添加下图所示的一些描述:
Protégé基本教程_第26张图片

同理,我们可以对AmericanPizza、AmericanHotPizza、SohoPizza添加约束:
Protégé基本教程_第27张图片

Protégé基本教程_第28张图片

Protégé基本教程_第29张图片

在类的创建界面,可以看到有一个小按钮可以选择“Asserted”或者“inferred”。Asserted是人手工创建的结构,inferred”是推理机推理得到的结构。
Protégé基本教程_第30张图片

The ‘manually constructed’ class hierarchy is called the asserted hierarchy.
The class hierarchy that is automatically computed by the reasoner is called the inferred hierarchy.

在使用推理机的时候,如果有矛盾的类将会以红色来表示,这样可以方便我们检查我们定义的类及其约束关系是否正确。Protégé提供了很多推理机的插件,选择相应的推理机,点击“Start Reasoner”就可以开始推理。

Protégé基本教程_第31张图片

到这里,我们发现,我们目前定义的,都是类的必要条件;也就是说对于某一个实例来说,它属于这个类,那么它一定具有这些条件,但是反过来如果它具有这些条件,我们不能说它一定属于这个类。
因此,我们需要把一些必要条件进一步写成充分必要条件。
例如对于芝士比萨(CheeseyPizza)来说,如果一个比萨是芝士比萨,那么它的饼面一定有芝士。按照上面讲过的步骤,我们可以添加下面这样的约束:
Protégé基本教程_第32张图片

反过来,如果一个比萨饼面上有芝士,那么它就是芝士披萨。于是我们就要把“hasTopping some CheeseToppig”这个必要条件改为充分必要条件。这事,我们在“hasTopping some CheeseToppig”前加上一个“and”即可,但是要注意的是应该在“Equivalent to”底下添加。
Protégé基本教程_第33张图片

同样的,我们使用推理机,可以发现在“inferred”界面,CheeseyPizza的子类自动扩充了。
Protégé基本教程_第34张图片

对比一下手工建立的结构和自动推理得到的结构:
Protégé基本教程_第35张图片

  • 全称量词描述

前面讲的这些描述都是是存在性量词描述(some),下面我们主要看一下全称量词描述。全称量词描述用关键字“only”来描述。在数学逻辑表达式中,全称量词描述可以用符号“∀”表示。例如“hasTopping only MozzarellaTopping”表示“这个类任一成员的Topping是MozzarellaTopping”。
假设我们定义一个Pizza的子类VegetarianPizza(素食Pizza),可以添加如下描述:
Protégé基本教程_第36张图片

当我们同样调用推理机的时候,却发现VegetarianPizza中并没有生成子类,按照其他Pizza的描述,VegetarianPizza中应当包含MargheritaPizza和SohoPizza。
Protégé基本教程_第37张图片

这是因为,在本体中使用的是开放世界假设(Open World Assumption, OWA)。

Close world Assumption(CWA),封闭世界假设,将当前未知的事物都设为假的假设。在BIM模型中的含义是:当某个元素在BIM模型中没有进行详细描述时,BIM模型默认其不存在。现在大多BIM软件采用CWA假设。
开放世界假设(Open World Assumption, OWA), 它和CWA相反, 对推不出来的命题就很诚实地当作不知道这个命题的正确与否, 这样的后果就是知识库中能推导出来的结论大大减少。语义网应该基于OWA假设。

因此,我们要对这些类添加闭包描述。
对MargheritaPizza:
Protégé基本教程_第38张图片

对SohoPizza:
Protégé基本教程_第39张图片

这时候我们再调用推理机,就可以发现VegetarianPizza的子类自动扩充了:
Protégé基本教程_第40张图片

我们知道,Pizza的种类有很多,除了我们定义的CheeseyPizza,VegetarianPizza和NamedPizza之外,还会有各种种类的Pizza,我们当然没有办法把它们全部定义完。因此,我们需要定义一个类——ValuePartitions,里面包含的是可以被枚举的类,例如Pizza的辣度SpicinessValuePartition,包括Mild,Medium和Hot三种程度。
Protégé基本教程_第41张图片

然后我们知道,在点菜的时候Pizza的辣度只能是这三种,而且这三种辣度集是互不相交的——也就是说Pizza要么是不辣的(Mild),要么是中辣的(Medium),要么是重辣的(Hot)。这里我们就要引入“Covering Axioms”。我们给SpicinessValuePartition这个类添加一个“Covering Axioms”,如下图所示:
Protégé基本教程_第42张图片

这时候,这个描述就表示:SpicinessValuePartition=Mild∪Medium∪Hot
可以用下面这张图来看出加上“Covering Axioms”前后这个类的不同含义:
Protégé基本教程_第43张图片

同样的,我们可以用前面讲到的量词描述来给不同的Pizza Topping添加Pizza辣度的描述。
对JalapenoPepperTopping:
Protégé基本教程_第44张图片

对RedPepperTopping:
Protégé基本教程_第45张图片

这时候,我们就可以找出这些Pizza里面的SpicyPizza:
Protégé基本教程_第46张图片

这里这个条件的意思是:这个实例是一个Pizza,并且它有某一种PizzaTopping,并且这个PizzaTopping的口味是Hot。调用推理机,可以得到SpicyPizza的子类有AmericanHotPizza:
Protégé基本教程_第47张图片

3.2 数量描述(Cardinality Restrictions)

数量描述主要包含min,max和exactly三个关键字,比较好理解。比如我们创建一个类InterestingPizza(至尊Pizza):
Protégé基本教程_第48张图片

也就是说,这里这个InterestingPizza至少要有3种不同的饼面(hasTopping min 3)。通过调用推理机,我们可以得到InterestingPizza主要包含的子类有:
Protégé基本教程_第49张图片

我们可以定义更加复杂的关系——比如FourCheesePizza:
Protégé基本教程_第50张图片

这里表示,FourCheesePizza一定有4种饼面,并且这些饼面都是Cheese Topping。调用推理机,我们发现,虽然FourCheesePizza没有子类,但是FourCheesePizza成为了InterestingPizza和CheeseyPizza的子类。因为InterestingPizza是至少有3种不同口味的饼面的Pizza,而FourCheesePizza有4种不同的Cheese口味,自然是InterestingPizza的子类;CheeseyPizza是饼面的Cheese Topping的Pizza,因此FourCheesePizza也是CheeseyPizza的子类。
Protégé基本教程_第51张图片

3.3 包含描述(hasValue Restrictions)

包含描述用关键字“value”来描述。在数学逻辑表达式中,存在性量词描述可以用符号“∋”表示。例如“hasCountryOfOrigin value Italy”(这里的Italy是一个实例)表示“这个类与这个实例Italy之间的关系是hasCountryOfOrigin”。
比如我们先建立一个实例“Italy”,它的类型是一个国家;建立一个对象属性hasCountryOfOrigin:
Protégé基本教程_第52张图片

之后。我们对MozzarellaTopping添加一条描述:
Protégé基本教程_第53张图片

我们再建立一个类,想要找出意大利风味的PizzaTopping:
Protégé基本教程_第54张图片

调用推理机,可以得到如下的结果:
Protégé基本教程_第55张图片

到这里,基本上把类的描述讲完了,也可以参考一下官方给出的文档:Class Expression Syntax

4. 枚举类(Enumerated Classes)

这里,我们发现,国家Country实际上是一个枚举类,那么枚举类在Protégé中应该怎么表述呢?
我们首先定义好这些国家的实例:
在这里插入图片描述

接着,在Country这个类添加一条描述:
Protégé基本教程_第56张图片

调用推理机,可以得到推理结果:
Protégé基本教程_第57张图片

对于实例很多的类,使用这种方法来定义类和实例之间的关系,无疑是一种好方法。

5. 数据属性(Data Property)

Object properties are relationships between two individuals.
Datatype properties describe relationships between individuals and data values.

如果说对象属性描述的是类之间的关系,那么数据属性描述的就是类本身的属性,感觉上更符合“属性”这个词的中文含义。数据属性的定义主要在Data property这个Tab下面,和对象属性定义的界面类似,这里不再赘述。
还是举这个Pizza的例子,我们知道不同的食物都是有不同的卡路里的,我们可以定义一个数据属性——hasCalorificContentValue,用来表示不同Pizza的热量。
这里需要注意的是,数据属性必须是从一个实例指向某一个数值。我们可以定义数据属性的定义域(不同的类),以及值域(属性值的数据类型),但是不能对“类”添加数据属性,只能对“实例”添加数据属性。

5.1 实例的添加及数据属性的定义

实例的添加需要在Individuals这个Tab里面实现:
Protégé基本教程_第58张图片

输入实例名,需要注意的是实例名不能重复:
Protégé基本教程_第59张图片

添加实例的类型,假设是一个MargheritaPizza:
Protégé基本教程_第60张图片

接下来添加实例的数据属性:
Protégé基本教程_第61张图片

Protégé基本教程_第62张图片

最后可以看到实例Pizza-1的相关描述如下:
Protégé基本教程_第63张图片

同理,我们可以建立一个AmericanPizza的实例,其卡路里是723:
Protégé基本教程_第64张图片

5.2 利用数据属性描述类

我们知道,食物都有卡路里值,这里我们需要加入一个描述:每一种Pizza都有hasCalorificContentValue这个数据属性。我们可以对Pizza这个类增加一些Data restriction。
Protégé基本教程_第65张图片

Protégé基本教程_第66张图片

在这个基础上,我们可以定义一个高卡路里Pizza类——HighCarloriePizza,指卡路里值高于400的类,并对其增加一些描述:
Protégé基本教程_第67张图片

调用推理机,可以得到HighCarloriePizza中加入了Pizza-2这个实例(因为Pizza-2的卡路里值为723):
Protégé基本教程_第68张图片

同样的,可以定义一个低卡路里Pizza类:
Protégé基本教程_第69张图片

调用推理机可以发现,因为Pizza-1的卡路里值只有263,所以它属于LowCarloriePizza:
Protégé基本教程_第70张图片

6. 小结

第二章基本算是手册的主体,第二章的内容理解之后开始建立本体应该不是问题了。这里面对于推理机的应用主要还是用于本体的检验和分类,一定程度上是减少了手工建立本体的过程。
另外,在开始建立本体时,本体的框架、类之间关系的梳理极其重要,也是能够顺利进行推理的先决条件。
另外,Protégé中对于类的描述其实就是对于数学集合符号和逻辑符号的不同运用,了解这些符号及描述的对应关系之后能更好地理解Protégé中的相关描述。

三、开放世界假设下的推理

前面提到,语义网是基于开放世界假设进行推理的。在开放世界假设下,未知的知识是不确定的,这将大大减少推理得到的结论。
比如,这里定义了一个类——NonVegetarianPizza,它的描述如下:
Protégé基本教程_第71张图片

我们再定义一种Pizza——UnclosedPizza,它的描述如下:
Protégé基本教程_第72张图片

而当我们调用推理机时,发现UnclosedPizza既不属于NonVegetarianPizza,也不属于VegetarianPizza,因为我们对UnclosedPizza的描述只是说UnclosedPizza有一种饼面是MozzarellaTopping,并没有说它只有CheeseTopping:
Protégé基本教程_第73张图片

而如果我们将UnclosedPizza的描述修改一下:
Protégé基本教程_第74张图片

我们可以发现,UnclosedPizza被归为了VegetarianPizza的子类:
Protégé基本教程_第75张图片

因此,在语义网的推理中,我们需要注意推理条件的设置。

你可能感兴趣的:(语义网,软件教程)