其他分享
首页 > 其他分享> > Protégé基本教程【Protégé5.5.0版本】

Protégé基本教程【Protégé5.5.0版本】

作者:互联网

Q&A

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

  2. 怎么增加and关系(e.g. pizza and has topping) alt alt alt 直接在这个框里面输入就行啦!

  3. 因为不常上CSDN,如果有问题可以直接发邮件给我~邮箱:oxazann@163.com

一、前言

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

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

Protégé下载地址

(如果官网下载比较慢的话,我放一个百度网盘的链接在这里:提取码:675d

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

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

建立本体主要在Entities这个Tab的界面下完成。一个最简单的本体需要完成类和对象属性的定义。 alt

1. 类的建立

alt

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

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

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

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

如果需要增加很多个子类,可以右键点击该类,选择“Add Subclasses”。 alt
在空白大框内输入要建立的子类的名字,以回车为分隔,就可以一键完成子类的建立。点击“Continue”,可以看到以这种方法建立的子类默认是均不相交的集合。 alt
点击“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”。alt

和Class的界面类似,Object property的界面如下图所示。 alt

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

2.2 对象属性特性的定义

在定义对象属性的时候,我们还可以定义对象属性的属性特性,对对象属性作出更多的说明。这些特性可以用家庭成员之间的关系很好地说明。 alt

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

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

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

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

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里面进行选择和定义。 alt

在Pizza的这个例子里面,我们可以定义好这些属性的值域和定义域。如图所示: alt

在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栏中找到: alt

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

alt

这里要说明一下,在教程里面对类添加约束是在“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的成员”。其关系如下图所示: alt

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

同理,我们可以对AmericanPizza、AmericanHotPizza、SohoPizza添加约束: alt

alt

alt

在类的创建界面,可以看到有一个小按钮可以选择“Asserted”或者“inferred”。Asserted是人手工创建的结构,inferred”是推理机推理得到的结构。 alt

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”就可以开始推理。

alt

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

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

同样的,我们使用推理机,可以发现在“inferred”界面,CheeseyPizza的子类自动扩充了。 alt

对比一下手工建立的结构和自动推理得到的结构: alt

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

当我们同样调用推理机的时候,却发现VegetarianPizza中并没有生成子类,按照其他Pizza的描述,VegetarianPizza中应当包含MargheritaPizza和SohoPizza。 alt

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

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

因此,我们要对这些类添加闭包描述。 对MargheritaPizza: alt

对SohoPizza: alt

这时候我们再调用推理机,就可以发现VegetarianPizza的子类自动扩充了: alt

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

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

这时候,这个描述就表示:SpicinessValuePartition=Mild∪Medium∪Hot 可以用下面这张图来看出加上“Covering Axioms”前后这个类的不同含义: alt

同样的,我们可以用前面讲到的量词描述来给不同的Pizza Topping添加Pizza辣度的描述。 对JalapenoPepperTopping: alt

对RedPepperTopping: alt

这时候,我们就可以找出这些Pizza里面的SpicyPizza: alt

这里这个条件的意思是:这个实例是一个Pizza,并且它有某一种PizzaTopping,并且这个PizzaTopping的口味是Hot。调用推理机,可以得到SpicyPizza的子类有AmericanHotPizza:alt

3.2 数量描述(Cardinality Restrictions)

数量描述主要包含min,max和exactly三个关键字,比较好理解。比如我们创建一个类InterestingPizza(至尊Pizza): alt

也就是说,这里这个InterestingPizza至少要有3种不同的饼面(hasTopping min 3)。通过调用推理机,我们可以得到InterestingPizza主要包含的子类有: alt

我们可以定义更加复杂的关系——比如FourCheesePizza: alt

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

3.3 包含描述(hasValue Restrictions)

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

之后。我们对MozzarellaTopping添加一条描述: alt

我们再建立一个类,想要找出意大利风味的PizzaTopping: alt

调用推理机,可以得到如下的结果: alt

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

4. 枚举类(Enumerated Classes)

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

接着,在Country这个类添加一条描述: alt

调用推理机,可以得到推理结果: alt

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

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里面实现: alt

输入实例名,需要注意的是实例名不能重复: alt

添加实例的类型,假设是一个MargheritaPizza: alt

接下来添加实例的数据属性: alt

alt

最后可以看到实例Pizza-1的相关描述如下: alt

同理,我们可以建立一个AmericanPizza的实例,其卡路里是723: alt

5.2 利用数据属性描述类

我们知道,食物都有卡路里值,这里我们需要加入一个描述:每一种Pizza都有hasCalorificContentValue这个数据属性。我们可以对Pizza这个类增加一些Data restriction。 alt

alt

在这个基础上,我们可以定义一个高卡路里Pizza类——HighCarloriePizza,指卡路里值高于400的类,并对其增加一些描述: alt

调用推理机,可以得到HighCarloriePizza中加入了Pizza-2这个实例(因为Pizza-2的卡路里值为723): alt

同样的,可以定义一个低卡路里Pizza类: alt

调用推理机可以发现,因为Pizza-1的卡路里值只有263,所以它属于LowCarloriePizza: alt

6. 小结

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

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

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

我们再定义一种Pizza——UnclosedPizza,它的描述如下: alt

而当我们调用推理机时,发现UnclosedPizza既不属于NonVegetarianPizza,也不属于VegetarianPizza,因为我们对UnclosedPizza的描述只是说UnclosedPizza有一种饼面是MozzarellaTopping,并没有说它只有CheeseTopping:alt

而如果我们将UnclosedPizza的描述修改一下: alt

我们可以发现,UnclosedPizza被归为了VegetarianPizza的子类: alt

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

四、将Excel表格中的数据导入Protégé

Protégé是支持从Excel表格中导入实例的,好像这个需求很多人都会用到,我自己没有怎么用过。具体教程可以看这个:protegeproject/cellfie-plugin。因为是Github地址,所以可能会不太稳定,我这里就简单地搬运一下好了。

导入Excel表格实例的插件在tools这个tab下面,如果你没有这个选项,可以检查一下是否更新了插件。 alt
导入进来之后,可以看到如下的窗口。区域1展示的是导入的excel的内容,可以包含多个sheet。区域2是导入规则,导入规则是需要自己去制定的。制定完规则后,点击区域3的“Generate Axioms”就行。如果没有制定导入规则,“Generate Axioms”这个按钮就无法点击。 alt

关于规则的语法可以看这里:MappingMasterDSL(这是项目的Github网址,里面有很多案例,建议看这个)、OWL 2 Web Ontology Language Manchester Syntax (Second Edition)(这个是W3C的网址,一般可以正常打开)。

比如说,我要创建Excel表里面的实例,可以用下面这个语句:Individual: @A。A表示把A这一列的都加进来,start row和end row可以指定加入的范围。对于具体的实例,也可以增加一些描述。具体的还是去看项目官网的一些案例吧~alt
得到的结果如下:alt

转载源

标签:教程,定义,5.5,可以,Prot,实例,Pizza,属性,描述
来源: https://www.cnblogs.com/-402/p/16449131.html