Semantic web 如何将类的每个实例与另一个类的每个实例关联起来? 一般问题

Semantic web 如何将类的每个实例与另一个类的每个实例关联起来? 一般问题,semantic-web,owl,ontology,protege,description-logic,Semantic Web,Owl,Ontology,Protege,Description Logic,我正在研究一个简单的本体,使用Protégé4.3并尝试创建一个模型,使得类C的每个实例都有特定的值v,对于给定的属性p,它是类v的一个实例。我可以用公理得出这个推论 C子类(p值v) 但我想我希望能够更接近于 C子类(p部分V) 因为我希望C的每个实例都与V的每个实例相关 一个具体的例子 我的例子是汽车和行动——我想为汽车创建一组行动。当我创建汽车的新实例时,我希望每个实例都有一组操作。如果我添加新的动作实例,我希望汽车的所有实例都反映它们的所有相关动作 为了添加更多细节,我定义了Auto类和

我正在研究一个简单的本体,使用Protégé4.3并尝试创建一个模型,使得类C的每个实例都有特定的值v,对于给定的属性p,它是类v的一个实例。我可以用公理得出这个推论

C子类(pv)

但我想我希望能够更接近于

C子类(p部分V)

因为我希望C的每个实例都与V的每个实例相关

一个具体的例子 我的例子是汽车和行动——我想为汽车创建一组行动。当我创建汽车的新实例时,我希望每个实例都有一组操作。如果我添加新的动作实例,我希望汽车的所有实例都反映它们的所有相关动作

为了添加更多细节,我定义了Auto类和两个子类:CarTruck。我还定义了一个动作类和一个子类构造动作。我已经定义了一个带有域Auto和范围ActionhasAction属性来关联自动和操作。我进一步创建了几个不同类型的个人:

  • 自动的
    • 卡车{F150}
    • 汽车{ChevyMalibu}
  • 动作{加速}
    • 货运{LoadCargo}
当我将Car作为(hasAction value Accelerate)的子类时,我可以看到ChevyMalibu具有推断的对象属性hasAction Accelerate,但这似乎类似于对对象属性断言进行硬编码。我希望对切维里布的所有车辆动作进行推断,同样,对F150的所有车辆动作进行推断。我不太清楚为什么像制作汽车这样的(hasAction some Action)的子类不能让我达到目的

我认为对的雄辩回答与我的问题有关,但我不能完全把这些加起来。

对规则进行编码 您正确地注意到,如果单个x是p值y的实例,那么您将推断断言p(x,y)。然而,简单地说x是p的一个实例,而不是Y的一个实例(没有更多的信息)不会让你推断p(x,yi)是任何特定的yi,即使yi是你声明的Y的唯一特定实例。这是因为猫头鹰制造了一个新的世界;仅仅因为你没有说某事是真(或假),并不意味着它不可能是真(或假)。(当然,你可能已经说了其他可以让你判断某件事是真是假的事情。)这在另一个问题中有更详细的描述

如果我理解正确,你想说的是:

  • 每辆车都与每个动作相关
  • 每一辆车都与每一辆车有关
  • 每一辆卡车都与每一辆卡车相关
  • 有几种方法可以做到这一点。最简单的方法是简单地使用一些SWRL规则,另一种方法叫做角色化

    使用SWRL规则 您可以编写与上述规则对应的SWRL规则,而且它们非常容易编写:

    车辆(?v)和楔块;动作(?a)&向右箭头;hasAction(?v,?a)
    汽车(?v)&楔块;行动(?a)和右箭头;hasAction(?v,?a)
    卡车(?v)和楔块;构造(?a)和右箭头;相作用(?v,?a)

    如果你使用所有这些规则,你会发现你的每辆车都有比你想要的更多的动作,因为根据第一条规则,每辆车都与每一个动作相关。例如,由于每一个卡车行动也是一个行动,而且每一辆车都是一辆车,第一条规则将把每一个卡车行动与每一辆车联系起来,而你并不是真的想要这样。即便如此,在这里使用一些规则可能是最简单的选择

    使用角色化 如果您不想使用SWRL规则,那么另一个选项是角色化。我在回答几个问题时已经描述了角色化以及如何实现角色化,因此您应该看看:

    这些会给你更多关于角色化的细节。不过,主要的一点是,我们得到了具有特殊行为的新属性,例如RCar:它们只将特定类的实例与同一实例关联。例如,RCar关联了Car的每个实例 对自己,不做任何其他事情。它实际上是一个特定类上的等价关系

    角色化在这里有什么用处?这意味着我们可以使用子属性链公理来推断一些hasAction属性。例如:

    hasAction&sqsubsetq;RCar•拓扑对象属性•牵引

    这本质上等同于SWRL规则(topObjectProperty是OWL的内置属性,它将所有内容与所有内容关联起来):

    RCar(?c,?c)和楔块;拓扑对象属性(?c,?a)和楔块;R牵引(?a,?a)和右箭头;hasAction(?c,?a)

    但有两个优点:

  • 子属性链公理不需要推理器支持SWRL;及
  • 子属性链公理适用于所有个体,但SWRL规则仅适用于命名个体,因此您可以获得更好的覆盖率
  • 不过,您仍然会遇到与SWRL规则的特殊性相同的问题;如果你说每辆车都与hasAction的每一个动作相关,那么子属性链也将适用于车的子类和动作的子类

    不过,还有一个明显的缺点:对于要在其中一个“规则”中使用的每个类,都需要一个新属性和一个等价的类公理,这有点单调乏味

    A.
    Action
      CarAction
      TruckAction
    
    Action
      VehicleAction
      CarAction
      TruckAction
    
    @prefix :      <https://stackoverflow.com/q/21512765/1281433/cars#> .
    @prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
    @prefix swrl:  <http://www.w3.org/2003/11/swrl#> .
    @prefix owl:   <http://www.w3.org/2002/07/owl#> .
    @prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
    @prefix swrlb: <http://www.w3.org/2003/11/swrlb#> .
    @prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
    
    :Action  a      owl:Class .
    
    <urn:swrl#a>  a  swrl:Variable .
    
    :DodgeRam  a    owl:NamedIndividual , :Truck .
    
    :Truck  a                owl:Class ;
            rdfs:subClassOf  :Vehicle .
    
    :Car    a                owl:Class ;
            rdfs:subClassOf  :Vehicle .
    
    <urn:swrl#v>  a  swrl:Variable .
    
    :LoadCargo  a   owl:NamedIndividual , :TruckAction .
    
    [ a          swrl:Imp ;
      swrl:body  [ a          swrl:AtomList ;
                   rdf:first  [ a                    swrl:ClassAtom ;
                                swrl:argument1       <urn:swrl#a> ;
                                swrl:classPredicate  :GenericAction
                              ] ;
                   rdf:rest   [ a          swrl:AtomList ;
                                rdf:first  [ a                    swrl:ClassAtom ;
                                             swrl:argument1       <urn:swrl#v> ;
                                             swrl:classPredicate  :Vehicle
                                           ] ;
                                rdf:rest   ()
    
                              ]
                 ] ;
      swrl:head  [ a          swrl:AtomList ;
                   rdf:first  [ a                       swrl:IndividualPropertyAtom ;
                                swrl:argument1          <urn:swrl#v> ;
                                swrl:argument2          <urn:swrl#a> ;
                                swrl:propertyPredicate  :hasAction
                              ] ;
                   rdf:rest   ()
    
                 ]
    ] .
    
    :Accelerate  a  owl:NamedIndividual , :GenericAction .
    
    :F150   a       owl:NamedIndividual , :Truck .
    
    :FordFocusZX5  a  owl:NamedIndividual , :Car .
    
    [ a          swrl:Imp ;
      swrl:body  [ a          swrl:AtomList ;
                   rdf:first  [ a                    swrl:ClassAtom ;
                                swrl:argument1       <urn:swrl#c> ;
                                swrl:classPredicate  :Car
                              ] ;
                   rdf:rest   [ a          swrl:AtomList ;
                                rdf:first  [ a                    swrl:ClassAtom ;
                                             swrl:argument1       <urn:swrl#a> ;
                                             swrl:classPredicate  :CarAction
                                           ] ;
                                rdf:rest   ()
    
                              ]
                 ] ;
      swrl:head  [ a          swrl:AtomList ;
                   rdf:first  [ a                       swrl:IndividualPropertyAtom ;
                                swrl:argument1          <urn:swrl#c> ;
                                swrl:argument2          <urn:swrl#a> ;
                                swrl:propertyPredicate  :hasAction
                              ] ;
                   rdf:rest   ()
    
                 ]
    ] .
    
    :Brake  a       owl:NamedIndividual , :GenericAction .
    
    :hasAction  a   owl:ObjectProperty .
    
    :GenericAction  a        owl:Class ;
            rdfs:subClassOf  :Action .
    
    <https://stackoverflow.com/q/21512765/1281433/cars>
            a       owl:Ontology .
    
    :Vehicle  a     owl:Class .
    
    <urn:swrl#c>  a  swrl:Variable .
    
    :ChevyMalibu  a  owl:NamedIndividual , :Car .
    
    <urn:swrl#t>  a  swrl:Variable .
    
    :CarAction  a            owl:Class ;
            rdfs:subClassOf  :Action .
    
    [ a          swrl:Imp ;
      swrl:body  [ a          swrl:AtomList ;
                   rdf:first  [ a                    swrl:ClassAtom ;
                                swrl:argument1       <urn:swrl#t> ;
                                swrl:classPredicate  :Truck
                              ] ;
                   rdf:rest   [ a          swrl:AtomList ;
                                rdf:first  [ a                    swrl:ClassAtom ;
                                             swrl:argument1       <urn:swrl#a> ;
                                             swrl:classPredicate  :TruckAction
                                           ] ;
                                rdf:rest   ()
    
                              ]
                 ] ;
      swrl:head  [ a          swrl:AtomList ;
                   rdf:first  [ a                       swrl:IndividualPropertyAtom ;
                                swrl:argument1          <urn:swrl#t> ;
                                swrl:argument2          <urn:swrl#a> ;
                                swrl:propertyPredicate  :hasAction
                              ] ;
                   rdf:rest   ()
    
                 ]
    ] .
    
    :TruckAction  a          owl:Class ;
            rdfs:subClassOf  :Action .
    
    @prefix :      <https://stackoverflow.com/q/21512765/1281433/cars#> .
    @prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
    @prefix owl:   <http://www.w3.org/2002/07/owl#> .
    @prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
    @prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
    
    :GenericAction  a            owl:Class ;
            rdfs:subClassOf      :Action ;
            owl:equivalentClass  [ a               owl:Restriction ;
                                   owl:hasSelf     true ;
                                   owl:onProperty  :R_GenericAction
                                 ] .
    
    :Car    a                    owl:Class ;
            rdfs:subClassOf      :Vehicle ;
            owl:equivalentClass  [ a               owl:Restriction ;
                                   owl:hasSelf     true ;
                                   owl:onProperty  :R_Car
                                 ] .
    
    :CarAction  a                owl:Class ;
            rdfs:subClassOf      :Action ;
            owl:equivalentClass  [ a               owl:Restriction ;
                                   owl:hasSelf     true ;
                                   owl:onProperty  :R_CarAction
                                 ] .
    
    :R_TruckAction  a  owl:ObjectProperty .
    
    :R_Car  a       owl:ObjectProperty .
    
    :Truck  a                    owl:Class ;
            rdfs:subClassOf      :Vehicle ;
            owl:equivalentClass  [ a               owl:Restriction ;
                                   owl:hasSelf     true ;
                                   owl:onProperty  :R_Truck
                                 ] .
    
    :Brake  a       owl:NamedIndividual , :GenericAction .
    
    :hasAction  a                   owl:ObjectProperty ;
            owl:propertyChainAxiom  ( :R_Vehicle owl:topObjectProperty :R_GenericAction ) ;
            owl:propertyChainAxiom  ( :R_Car owl:topObjectProperty :R_CarAction ) ;
            owl:propertyChainAxiom  ( :R_Truck owl:topObjectProperty :R_TruckAction ) .
    
    :R_CarAction  a  owl:ObjectProperty .
    
    :R_Truck  a     owl:ObjectProperty .
    
    :F150   a       owl:NamedIndividual , :Truck .
    
    :Accelerate  a  owl:NamedIndividual , :GenericAction .
    
    :Action  a      owl:Class .
    
    :ChevyMalibu  a  owl:NamedIndividual , :Car .
    
    :R_Vehicle  a   owl:ObjectProperty .
    
    :FordFocusZX5  a  owl:NamedIndividual , :Car .
    
    :R_GenericAction  a  owl:ObjectProperty .
    
    :TruckAction  a              owl:Class ;
            rdfs:subClassOf      :Action ;
            owl:equivalentClass  [ a               owl:Restriction ;
                                   owl:hasSelf     true ;
                                   owl:onProperty  :R_TruckAction
                                 ] .
    
    :DodgeRam  a    owl:NamedIndividual , :Truck .
    
    <https://stackoverflow.com/q/21512765/1281433/cars>
            a       owl:Ontology .
    
    :LoadCargo  a   owl:NamedIndividual , :TruckAction .
    
    :Vehicle  a                  owl:Class ;
            owl:equivalentClass  [ a               owl:Restriction ;
                                   owl:hasSelf     true ;
                                   owl:onProperty  :R_Vehicle
                                 ] .