protege 构建本体

这里我们使用的是Protégé-OWL规范。
推理机后的内容主要是实操内容,根据推理机来对protege本体模型的一个操作过程,以加深本体模型的一个规范认识。

一、什么是本体(Ontologie

本体是用来获得你所感兴趣的领域的知识;

二、OWL Ontologies

OWL Ontologies由w3c从斯坦福大学的本体语言发展而来的。

三、OWL Ontologies的组成

OWL Ontologies是由个体(Individuals),属性(Properties),类(Classes)组成。

Individuals(个体)

  • 指的是在域(domain)中我们感兴趣的对象。类中的一个实例。
  • Individuals必须明确的声明彼此之间是否相同。不同的名字可能指的是相同的Individuals。

Properties(属性)

  • 指的是Individuals上二元关系,他连接着两个Individuals。如:小三的父亲叫大三。其中,“的父亲叫”就连接着小三和大三两个Individuals。
  • Properties可以存在reverse,如上所示,“的父亲叫”的reverse就是“的儿子叫”。
  • Properties可以被限定成单值,此时Properties是functional的。(后面介绍)
  • Properties也可以是transitive (可传递的)或symmetric(对称的)(后面介绍)

Classes

  • 可以看作是包含Individuals的集合。
  • 我们使用正式而精准的形式来描述Classes。Classes通常被组织成supperclass—subclass形式的层状结构,比如,动物和狗。

四、创建本体

命名一个Classes(采用单词首字母大写方式,类似于java中类的命名)

  • 一个初始化的本体包含一个名字叫做Thing的classes,他表示包含所有individuals的集合,所以,所有的其他classes都是他的subclasses。

Disjoint(解体)Classes

  • 如果任意一个Individuals(或Object)仅仅是众多Classes中某一个的实例(instance),那么这些Classes是Disjoint的。即根据classes种类进行ow的拆分。

使用本体工具来创建Classes

【PizzaBase 子类 ThinAndCrispy 和 DeepPan】

【PizzaTopping子类Cheese、Mozzarella、Parmezan、Meat、Ham、Pepperoni】

(例子只用参考)

subclass的意思

例如“狗”是“动物”的subclass。那么“狗”的instance也是“动物”的instance,一个东西是狗,那么他一定是动物。(这和java中的子类父类貌似是一样的)

OWL Properties

  • OWL Properties表示relationships。properties主要可分为2种, Object properties and Datatype properties.。
  • Object properties 是指两个individual之间的关系。如:父子。
  • Object properties是指individual的属性。如:年龄。

我们可以创建Sub properties,它用来限定Supper properties的范围。如:the property has Father 可以限定范围为一个更大范围property hasParent的Sub propertie。
如:小明有父亲大明,那么我们也可以说小明的双亲有大明。此时,“有父亲”就是“有双亲”的sub property。

Inverse Properties(逆属性)

如:如果Matthew hasParent Jean, 那么根据inverse property我们可以推理出Jean hasChild Matthew。

Property Characteristics(特征)

  • OWL允许通过使用property characteristics来增强properties 的含义(内涵)。

  • Functional(功能)Properties
    Properties是单值的。例如:hasBirthMother,这个就是functional的,因为一个人 他只能有一个生母。另外:如果我们说Jean hasBirthMother Lily并且我们说Jean hasBirthMother Mary,那么因为hasBirthMother是一个 functional property,我们可以推理出Lily和Mary必须是同一个 individual.但是如果Lily和Mary明确的声明为两个 不同的Individuals,那么就会出现矛盾(inconsistency)。

  • Inverse Functional(逆功能)Properties
    如:hasBirthMother的Inverse Functional Properties是isBirthMotherOf

  • Transitive(传递) Properties
    如果一个property是transitive(可传递的), 并且这个property联系individual a 和individual b, 同时也联系individual b和individual c,那么我们可以推理individual a和individual c存在一种property P
    注:
    a)如果一个property是可传递的,那么它的inverse property也是可传递的。
    b)如果一个property是可传递的那么它一定不是一个functional Property。

  • Symmetric(对称)Properties
    如果一种property P 是symmetric(对称的), 并且这个property联系individual a和individual b同时individual b 同样联系individual a通过property P。那么,我们称property P为Symmetric(对称)Properties。

  • Antisymmetric(反对称)properties(反对称)
    如果一种property P is antisymmetric(反对称的) ,并且这种property联系individual a和individual b但individual b无法联系individual a 通过property P。那么,我们称property P为Antisymmetric(反对称)properties。

  • Reflexive(自反)properties
    如果一种property P必须将individual a与自己连接起来。如:individual a know individual b,但individual a 一定也know individual a,也就是自己。那么,我们称property P为Reflexive(自反)properties。

  • Irreflexive(非自反)properties
    如果一种property P是irreflexive(非自反)的, 我们可以描述为一种property将两个不同的individuals连接起来。也就是说,这种properties只能连接不同的individuals。如:小明的父亲是大明,那么我们不能说小明的父亲是小明。

Property Domains(域) and Ranges(范围)

【定义 hasTopping 的 Range PizzaTopping domain Pizza】

【定义 isToppingOf 的 Range Pizza domain PizzaTopping 】

Properties必须要有一个指定的Domains(域)和Ranges(范围)。 属性将来自的individuals链接到范围内的individuals。

例如:在Pizza 本体中,property hasTopping 可能将属于class Pizza的individuals 与属于class PizzaTopping的individuals连接起来。这种情况下hasTopping property的Domains(域)是PizzaRanges(范围)是PizzaTopping

另外:如果有 a hasTopping b ,并且ab都是individuals,那么我们就可以说a属于class Pizza,b属于class PizzaTopping****。通常来说,属性的域是其逆的范围,属性的范围是其逆的域。

描述和定义Classes

  • Property Restrictions(限制)
    Owl的restriction有三种:

    • Quantifier Restrictions
    • Cardinality Restrictions
    • hasValue Restrictions.
  • quantifier restrictions(existential restrictions 和 universal restrictions)

    • existential restrictions(存在约束)
      描述在特定属性上至少与属于特定类别的个体有一种关系的个体类别。
      如:我至少买了一袋饼干从好又多超市。
    • universal restrictions (普通约束)
      描述对于给定属性,仅与作为指定类成员的个人与此属性具有关系的个人的类。
      如:我买的东西都是从好又多市(或者 我买的东西只(only)从好又多超市)

注:限制描述匿名类(未命名类)。匿名类包含满足此限制的所有个人例如:Existential restrictions“上面至少覆盖了一层紫色奶酪。”这句话就描述了一个匿名类,任何上面覆盖至少一层紫色奶酪的individuals都属于该匿名类的,“我做的蛋糕”这个类也属于这个匿名类。所以当我们对一个类进行限制时,在supperclass里定义。

  • 定义一些其他的类(一些使用技巧)

Pizza 子类 NamedPizza

NamedPizza 子类MargheritaPizza has at least one toppings of MozzarellaTopping and TomatoTopping

【创建AmericanaPizza 通过克隆 MargheritaPizza 因为他扩展了一个限制 PepperoniTopping】

【创建AmericanHotPizza 通过克隆 AmericanaPizza 增加限制JalapenoPepperTopping

【创建SohoPizza 克隆MargheritaPizza 增加OliveTopping 和ParmezanTopping】

使用Reasoner(推理机)

  • protege中搭载的虚拟机名叫Fact++。
  • 推理机制可分为两种层次结构:在Prot'eg'e 4中,“手动构造”类层次结构称为断言层次结构。推理器自动计算的类层次结构称为推断层次结构
  • 主要功能:
    • 判断一个类是否是另一个类的子类
    • consistency checking(一致性检测)
  • 如果类被发现不一致,它的图标将以红色突出显示。
    (由于protege的推理机制在实体补充完善方面尚有不足,在搭配Jena框架的数据存储时,我们一般采用Jena中的推理机进行本体推理,此处不做过多说明)

充分必要条件(primitive class 和 defined class)

到目前为止,我们所创建的所有类都只使用了必要条件来描述它们,必要条件可以理解为“如果某个类是该类的成员,则必须满足这些条件”。单凭必要条件,我们不能说“如果某事物满足这些条件,那么它必须是这个类的成员”。

  • 只定义了必要条件的类叫做primitive class
  • 定义了充要条件的类叫做 defined class

【定义Pizza的子类CheesyPizza定义限制hasTopping some CheeseTopping
【将其转化为充分必要条件,Classify 我们可以看出defined class 的不同】

总结:如果现在使用必要和充分条件来定义A级,我们可以说,如果一个个体是A级的成员,它必须满足这些条件,我们现在可以说,如果任何(随机)个体满足这些条件,那么它必须是A级的成员。

Automated Classification(自动分类)

为什么要使用Reasoner。当我们创建了成百上千的类时,使用Reasoner来自动计算子类父类之间的关系将是十分必要的。没有了Reasoner我们很难保证 大规模本体的健壮性和逻辑性。自动分类这项技术,使得本体可维护并且模块化,它不仅使得其他的本体和程序能够reuse 我们定义的本体,而且还最大限度的减少了使用者在建立多继承类时的错误。

【使用OWLViz 显示类的继承层次结构】

Universal Restrictions (Quantifier Restrictions)

【创建一个Pizza的子类VegetarianPizza 】
【增加限制 hasTopping only (CheeseTopping or VegtableTopping)】

这意味着,如果某物素食披萨类的一员,它必须是披萨,并且它必须只有(通用数量)的馅料是奶酪馅料蔬菜馅料,也可以没有,比如,中国现在实行计划生育,如果夫妻有了孩子那么只能有一个,但是这个夫妻也可以没有孩子。那么就不存在only这个限制。

【将上面的必要条件转化为充分条件】

Automated Classification and Open World Reasoning

【使用推理机进行自动分类】

我们发现MargheritaPizzaSohoPizza 并没有被归类为 VegetarianPizza的子类,但是按照我们的定义,MargheritaPizzaSohoPizza 都至少有个蔬菜的顶部和奶酪的顶部,再看VegetarianPizza 的充要条件, only have 蔬菜的顶部和奶酪的顶部的pizza都是VegetarianPizza****。

但是Reasoning in OWL (Description Logics) is based on what is known as the open world assumption(OWA),意思是,除非我们明确的说明某个事物的存在,否则我们就不能说他是存在的。分析上面的:因为我们没有明确的指定他们只有奶酪和蔬菜顶,那么他们就可以有其他的顶部。这样的话,他们就不符合VegetarianPizza 的充要条件了。

为了使这两种pizza只有蔬菜和奶酪顶部,我们就得在hasTopping上使用closure axiom(封闭公理)

Closure Axioms(封闭公理):

只能用指定的填料填充。这个限制有一个填充物,它是在存在限制中发生的填充物的集合

【为MargheritaPizzahasTopping 添加封闭公理 】

【hasTopping only (MozzarellaTopping or TomatoTopping)】

【为其他几个pizza使用更方便的方法添加封闭公理】

现在我们可以说,MargheritaPizza 至少有一个MozzarellaTopping和TomatoTopping,并且the toppings must only be kinds of MozzarellaTopping or TomatoTopping。

【Classify之后我们看结果】

Value Partitions

Value Partitionsare他并不属于任何一种本体语言的一部分,而是一种设计模式,类似于面向对象程序设计中的设计模式。它可以改善我们对类的描述。

【创建thing的子类ValuePartition

【ValuePartition的子类SpicinessValuePartitionHot** Medium **Mild)**】

【创建Object Property hasSpiciness 并使其functional】

【为SpicinessValuePartition 增加covering axiom 在equivalent里面输入Hot or Medium or Mild】

Adding Spiciness to Pizza Toppings

【对PepperTopping的所有子类设置必要条件 hasSpiciness some Hot】

【定义Pizza的子类SpicyPizza 设置必要条件:hasTopping some (PizzaTopping and hasSpiciness some Hot)】

【将必要条件化为充要条件】

Fillter描述了一个匿名类,这个顶是Pizzatopping,并且特别辣。

【Classifiy之后我们发现AmericanHotPizza 成为了SpicyPizza的子类】

Cardinality Restrictions** **(Owl的restriction中的第二种)

描述与其他个人或数据类型值至少(最小)、最多(最大)或完全具有指定数量(完全)关系的个人的类。

【创建Pizza的子类InterestingPizza 定义必要条件hasTopping min 3】

注意:我们这里3后面并没有指定fillter是什么,代表可以是任意的individuals,等价于:hasTopping min 3 Thing

【转化为充要条件】

【Classify之后观察。。。】

Qualified(受限的)Cardinality Restrictions

他比上面的more specify

【定义NamedPizza的子类FourCheesePizza 定义必要条件hasTopping exactly 4 CheeseTopping】

五、Datatype Properties(数据类型属性)

描述 individual和data values之间的关系。

【现在来描述pizza所含的热量】

【增加Datatype Properties hasCalorificContentValue】

【增加individual ExampleMargherita其 type是MargheritaPizza】

【为该对象增加Data Property assertion 其中type选择integer

值填写250】

【增加individual ExampleSoho其 type是SohoPizza 】

【为该对象增加Data Property assertion 其中type选择integer

值填写800】

我们声明所有的pizza都有热量值

【选定Pizza类 ,增加Supperclass 选择Data restriction creator】

我们对pizza的热量值进行分类,产生不同的pizza

【创建HighCaloriePizza 和LowCaloriePizza 作为Pizza的子类】

【创建SupperClass 选择Class expression editor 】

【键入Pizza that hasCalorificContentValue some integer[>= 400]】

【同理LowCaloriePizza应当是< 400】

【分别将他们设为充要条件】

【Classify之后我们看他们的members 】

某一确定的Pizza他所含的热量是固定的,也就是说是单值的,我们可以使用functional来限定Data Property。

【选定hasCalorificContentValue 选中functional】

六、More On Open World Reasoning

这部分主要展示了Open World Reasoning中的细微差别

【创建NonVegetarianPizza 类,作为VegetarianPizza类的complement】

【使他们disjoint】

【双击Supperclass中的pizza ,添加Pizza and not VegetarianPizza】

【转换为充分必要条件】

【Classify...之后观察】

我们创建一个类, does not have a closure axiom(封闭公理)on the hasTopping property

【创建NamedPizza的子类UnclosedPizza】

【必要条件:hasTopping some MozzarellaTopping】

【Classify...之后观察UnclosedPizza 既不是VegetarianPizza也不是NonVegetarianPizza.】前面封闭公理部分已经讲过了原因。

七、Creating Other OWL Constructs

  1. Creating Individuals
    我们现在来描述pizza饼起源的国家;
    【创建Thing 的子类Country】
    【创建 individual ::Italy England America France】
    因为相同的individual可以有不同的名称。
    【是他们Different from each other】

  2. hasValue Restrictions(O****wl的restriction中的第三种
    描述的是两个individual之间至少有的关系P,
    【创建Object property::hasCountryOfOrigin
    【选定MozzarellaTopping 增加必要条件hasCountryOfOrigin value Italy】

  3. Enumerated Classes
    【选定Country类 ,在Equivalent class处增加{America, England, France, Italy}】意思是如果一个individual他属于Country,那么他一定属于这几个国家中的一个。

一半是现实,一半是梦想~ 一念花开,一念花落~
原文地址:https://www.cnblogs.com/wujunchao/p/12259623.html