Rdf 我如何从OWL中的两个不同属性中通过传递推断出一些东西?

Rdf 我如何从OWL中的两个不同属性中通过传递推断出一些东西?,rdf,owl,protege,Rdf,Owl,Protege,我正试图用Protege和猫头鹰制作我最喜欢的幻想世界的本体,但我被卡住了。我有两个问题我自己都搞不懂。但首先是设置: 在我的幻想世界里有许多种族,每个种族被划分成许多子行为——每个人都有不同的国王,崇拜不同的上帝,等等 Q1:我想做的是,知道一个角色a来自B阵营,B是C种族的一个阵营,那么我们应该能够推断a来自C种族 每个派系可能包含一些命名角色。我已经用以下三个类表达了这一点: 比赛 派系 性格 以及以下特性: ex:SomeFaction rdfs:subClassOf ex:Some

我正试图用Protege和猫头鹰制作我最喜欢的幻想世界的本体,但我被卡住了。我有两个问题我自己都搞不懂。但首先是设置:

在我的幻想世界里有许多种族,每个种族被划分成许多子行为——每个人都有不同的国王,崇拜不同的上帝,等等

Q1:我想做的是,知道一个角色a来自B阵营,B是C种族的一个阵营,那么我们应该能够推断a来自C种族

每个派系可能包含一些命名角色。我已经用以下三个类表达了这一点:

  • 比赛
  • 派系
  • 性格
以及以下特性:

ex:SomeFaction rdfs:subClassOf ex:SomeRace .

ex:SomePerson a ex:SomeFaction .
  • isOfRace-功能性,与containsFaction相反,域=派系,范围=种族
  • containsFaction-与isOfRace相反,域=Race
  • isofaction-功能,与containsCharacter相反,域=字符,范围=派系
  • containsCharacter-异类的倒数,域=异类,范围=角色
我已经将属性添加到相应的类中。我知道一般说来,一个派别可以有多个类型的“iFACTACE”属性,如果是这样的话,推理引擎就不知道哪一个可以考虑角色的“真正”种族,但是我又使属性“ISOFACE”和“同构”功能,所以我看它不应该是个问题。

Q2:只有当我在Q1中提出的问题可行时,Q2才是相关的。无论如何,让我们再次规划设置:

每个派系可以有多个城市(每个城市由一个派系拥有),每个城市位于一个大陆上。每一派系也被对立双方归类为“秩序”或“混乱”。OWL是否支持表示以下内容的构造:

一个派系与另一个派系冲突(可传递):

  • 这两个城市在同一个大陆上至少有一个城市
  • 它们的排列方式不同,例如一个是“有序”,另一个是“混乱”
  • 或者换句话说,是否可以推断属性?如果可以,我应该如何实施上述限制


    谢谢

    在我们深入研究OWL之前,您甚至可以使用RDF来实现这类功能,但不需要自定义属性:

    ex:SomeFaction rdfs:subClassOf ex:SomeRace .
    
    ex:SomePerson a ex:SomeFaction .
    
    然而,我不喜欢这种方法,因为我认为类描述了实体不变的本质和结构,而至少派系肯定不这样。它还可能导致OWL中的冲突,因为如果您想将类用于其他用途,则某些概要文件不允许将类视为单独的


    您的问题类似于试图用OWL描述
    foaf:membershipClass
    ,这通常很难做到(没有黑客可能是不可能的)。可以根据具体情况进行描述,但是:

    [
      a owl:Restriction ;
      owl:onProperty ex:isOfFaction ;
      owl:hasValue ex:SomeFaction
    ] rdfs:subClassOf [
      a owl:Restriction ;
      owl:onProperty ex:hasRace ;
      owl:hasValue ex:SomeRace
    ]
    
    这基本上是一种暗示,即任何具有特定派别的个人都有特定的种族

    但是,我认为您可以在这里使用及物性:

    ex:isOfGroup a owl:TransitiveProperty .
    
    ex:isOfRace rdfs:subPropertyOf ex:isOfGroup .
    ex:isOfFaction rdfs:subPropertyOf ex:isOfGroup .
    
    ex:SomeFaction ex:isOfRace ex:SomeRace .
    ex:SomePerson ex:isOfFaction ex:SomeFaction .
    
    我们可以推断出
    ex:SomePerson-ex:isOfGroup-ex:SomeRace

    使用OWL 2,它被简化为属性链:

    [
      owl:propertyChainAxiom ( ex:isOfFaction ex:isOfRace )
    ] rdfs:subPropertyOf ex:hasRace .
    

    第二个问题需要类似的推理。我将尝试使用OWL2,因为我怀疑它在OWL1中是否可以表达

    ex:occupiesContinent owl:propertyChainAxiom ( ex:controlsCity ex:onContinent ) .
    ex:occupiedByFaction owl:inverseOf ex:occupiesContinent .
    
    ex:sharesContinentWith owl:propertyChainAxiom ( ex:occupiesContinent ex:occupiedByFaction ) .
    
    ex:alignmentOf owl:inverseOf owl:hasAlignment .
    
    ex:hasSameAlignment owl:propertyChainAxiom ( ex:hasAlignment ex:alignmentOf ) .
    
    问题是我们不能对属性的连接和否定进行建模。我们可以使用上面的例子来模拟特定派别的敌人,但是:

    [
      owl:intersectionOf (
        [
          a owl:Restriction ;
          owl:onProperty ex:sharesContinentWith ;
          owl:hasValue ex:SomeFaction
        ] [
          owl:complementOf [
            a owl:Restriction ;
            owl:onProperty ex:hasSameAlignment ;
            owl:hasValue ex:SomeFaction
          ]
        ]
      )
    ] owl:equivalentClass [
      a owl:Restriction ;
      owl:onProperty ex:isInConflict ;
      owl:hasValue ex:SomeFaction
    ] .
    
    这意味着任何与一个特定派别共享同一大陆且没有相同路线的派别都必须与该派别相关,即
    ex:isInConflict


    我不确定是否有更好的方法,但如果我找到了,我会更新这个答案。

    在我们深入研究OWL之前,您甚至可以使用RDF来实现这类功能,但不需要自定义属性:

    ex:SomeFaction rdfs:subClassOf ex:SomeRace .
    
    ex:SomePerson a ex:SomeFaction .
    
    然而,我不喜欢这种方法,因为我认为类描述了实体不变的本质和结构,而至少派系肯定不这样。它还可能导致OWL中的冲突,因为如果您想将类用于其他用途,则某些概要文件不允许将类视为单独的


    您的问题类似于试图用OWL描述
    foaf:membershipClass
    ,这通常很难做到(没有黑客可能是不可能的)。可以根据具体情况进行描述,但是:

    [
      a owl:Restriction ;
      owl:onProperty ex:isOfFaction ;
      owl:hasValue ex:SomeFaction
    ] rdfs:subClassOf [
      a owl:Restriction ;
      owl:onProperty ex:hasRace ;
      owl:hasValue ex:SomeRace
    ]
    
    这基本上是一种暗示,即任何具有特定派别的个人都有特定的种族

    但是,我认为您可以在这里使用及物性:

    ex:isOfGroup a owl:TransitiveProperty .
    
    ex:isOfRace rdfs:subPropertyOf ex:isOfGroup .
    ex:isOfFaction rdfs:subPropertyOf ex:isOfGroup .
    
    ex:SomeFaction ex:isOfRace ex:SomeRace .
    ex:SomePerson ex:isOfFaction ex:SomeFaction .
    
    我们可以推断出
    ex:SomePerson-ex:isOfGroup-ex:SomeRace

    使用OWL 2,它被简化为属性链:

    [
      owl:propertyChainAxiom ( ex:isOfFaction ex:isOfRace )
    ] rdfs:subPropertyOf ex:hasRace .
    

    第二个问题需要类似的推理。我将尝试使用OWL2,因为我怀疑它在OWL1中是否可以表达

    ex:occupiesContinent owl:propertyChainAxiom ( ex:controlsCity ex:onContinent ) .
    ex:occupiedByFaction owl:inverseOf ex:occupiesContinent .
    
    ex:sharesContinentWith owl:propertyChainAxiom ( ex:occupiesContinent ex:occupiedByFaction ) .
    
    ex:alignmentOf owl:inverseOf owl:hasAlignment .
    
    ex:hasSameAlignment owl:propertyChainAxiom ( ex:hasAlignment ex:alignmentOf ) .
    
    问题是我们不能对属性的连接和否定进行建模。我们可以使用上面的例子来模拟特定派别的敌人,但是:

    [
      owl:intersectionOf (
        [
          a owl:Restriction ;
          owl:onProperty ex:sharesContinentWith ;
          owl:hasValue ex:SomeFaction
        ] [
          owl:complementOf [
            a owl:Restriction ;
            owl:onProperty ex:hasSameAlignment ;
            owl:hasValue ex:SomeFaction
          ]
        ]
      )
    ] owl:equivalentClass [
      a owl:Restriction ;
      owl:onProperty ex:isInConflict ;
      owl:hasValue ex:SomeFaction
    ] .
    
    这意味着任何与一个特定派别共享同一大陆且没有相同路线的派别都必须与该派别相关,即
    ex:isInConflict


    我不确定是否有更好的方法,但如果我找到了,我会更新此答案。

    这不是一个正确的答案,但我已尝试创建一个新的答案。你可以从中获得灵感(或者使用它,如果你愿意的话)。这不是一个正确的答案,但我已经尝试过创造一个新的答案。你可以从中获得灵感(如果你愿意,也可以使用它)。