Rdf 为类的每个成员创建新实例值

Rdf 为类的每个成员创建新实例值,rdf,owl,protege,Rdf,Owl,Protege,以下是我想做但不能做的: 我正在实例化属于不同类别(模型)的设备。假设是汽车。实例化的汽车应该继承“默认”属性,这取决于模型,但每个都应该有自己的属性。类层次结构的示例: Car Tesla Honda Property “属性”将是一对,例如,,。 我可以为特斯拉定义默认属性,创建实例: teslaPropertySpeed = <"top_speed", 100> teslaPropertySeats = <"seats", 5> …然而,如果我买了一辆特

以下是我想做但不能做的:

我正在实例化属于不同类别(模型)的设备。假设是汽车。实例化的汽车应该继承“默认”属性,这取决于模型,但每个都应该有自己的属性。类层次结构的示例:

Car
  Tesla
  Honda
Property
“属性”将是一对
,例如,
。 我可以为特斯拉定义默认属性,创建实例:

teslaPropertySpeed = <"top_speed", 100>
teslaPropertySeats = <"seats", 5>
…然而,如果我买了一辆特斯拉,我可能会“破解”它,让它跑得更快或更慢,或者移除座椅。因为我说所有的特斯拉都有那个财产,它就不再是特斯拉了

更好的方法是说,所有特斯拉都有自己的速度和座位属性,我想将其设置为默认的、可修改的值


简而言之,我想为每个实例化的特斯拉创建新的属性。我可以声明地这样做吗?至于默认值,我可以在特斯拉的子类(比如FactoryTesla)中定义默认值,这样修改后的特斯拉将从该子类中删除,但将保留较高的“特斯拉”类。

您将无法完成您想要做的事情。这是为了能够推断属于
Tesla
类型的汽车不再属于
Tesla
类型,因为它已被修改。正如AKSW所指出的那样,由于推断是单调的,所以这是不可能发生的。这大致意味着,在添加进一步的公理之前已经推断出的任何东西,在添加进一步的公理之后仍然会被推断出来。“松散”推论的唯一方法是修改或删除本体中现有的公理

能够做的是定义
特斯拉
类的属性,并允许推理者推断某个人属于
特斯拉
类型。下面的本体就可以做到这一点

DataProperty: hasSeats
    Range: xsd:integer


DataProperty: hasTopSpeed
    Range: xsd:integer


Class: Car
    EquivalentTo: 
        (hasSeats exactly 1 xsd:integer)
         and (hasTopSpeed exactly 1 xsd:integer)


Class: Tesla
    EquivalentTo: 
        (hasSeats value 5)
         and (hasTopSpeed value 100)
    SubClassOf: 
        Car


Individual: aTesla
    Facts:  
     hasSeats  5,
     hasTopSpeed  100

Individual: notATesla
    Facts:  
     hasSeats  2,
     hasTopSpeed  80
这将推断
aTesla
个人属于
Tesla
类型,而不会对个人
notATesla
进行此类推断。但是,如果您创建一个单独的
ModifiedTestLA
,如下所示,这将导致推理机给出不一致的结果

Individual: modifiedTesla
    Type: Tesla
    Facts: hasTopSpeed  200 
不一致的原因(对于上述本体)是因为
modifiedTesla
通过
hasTopSpeed
属性关联了两次:一次用于
hasTopSpeed 100
,一次用于
hasTopSpeed 200
。这是因为
hasTopSpeed 200
不会覆盖
Tesla
类中的属性


从您的问题来看,您似乎是从面向对象的角度来处理这个问题的。虽然有一些相似之处,但在大多数情况下,面向对象和本体论是截然不同的。我已经写过一些让人在这方面感到困惑的陷阱。

看起来您已经找到了一种方法,通过引入兄弟子类,可以简单地“细化”超类中更通用的属性。那么什么不起作用呢?不要,猫头鹰的推理是单调的。它不是基于默认逻辑,而是FOL(其可判定片段描述逻辑),不起作用的是我不希望所有的特斯拉都链接到同一个属性个体,而是每个个体都链接到自己的属性个体,我正在寻找一种方法,在创建新的特斯拉实例时自动实现这一点,而不必亲自为其创建新的财产。我想说的是“每一辆特斯拉都有自己的最高速度和座位数量,这与他们出厂时的价值相同”。不过,我想我可以为修改后的特斯拉创建一个新的属性“个人”,将其从默认属性中分离出来。事实上,个人失去特斯拉的身份将是我想要避免的意外副作用,而不是实现的。我的问题实际上是宣布每一个新的特斯拉个人都应该与他自己的财产一起创建。我不希望它们都共享相同的属性,只共享具有相同默认值的属性。
Individual: modifiedTesla
    Type: Tesla
    Facts: hasTopSpeed  200