如何在 OWL2 / Protege / Ontology 中将 属性 定义为两个 "conditions" 的交集

How to define a property as intersection of two "conditions" in OWL2 / Protege / Ontology

如果问题已经被问过或者回答很琐碎,我们深表歉意。我尝试搜索如何实现这个特定案例,但我还没有找到任何解决方案。

问题:这就是我想要建模的:
假设 属性 'isFriendOf' 不是对称的,为了使这种关系成为可能 (x isFriendOf y) 两个条件必须有效:

x sendsFriendRequestTo y
y acceptsFriendRequestFrom x

并且只要这两个属性出现在我们的 Ontology 中,就会自动推断出 属性 x isFriendOf y。即:

(x sendsFriendRequestTo y) AND (y acceptsFriendRequestFrom x) -> x isFriendOf y

到目前为止我尝试了什么
我试图通过以下方式将此 属性 建模为 属性 链

1) sendsFriendRequestTo some (acceptsFriendRequestFrom Self) -> isFriendOf 

(reasoner 报错,日志说:Non-Simple Obj 属性 is used a simple one)

2) sendsFriendRequestTo o acceptsFriendRequestFrom -> isFriendOf 

(虽然我意识到这不是两个属性的正确组合)

评论
我可以将 Classes 定义为两个 Classes/concepts 的交集;但我不清楚如何将 属性 定义为其他两个属性的交集(在这种情况下,如何指定最终 属性 的域和范围?)。

我在 "Rolification" 上找到了一些东西(即定义一个 Class 然后强制将其作为角色处理),但我不确定我是否理解它是如何工作的,或者它是否对我试图建模的东西有用。

有什么帮助吗?

在OWL中,恐怕你不能完全代表这一点。您可以选择两个选项:在 OWL 中指定您想要的部分公理化并接受它,或者依赖其他形式主义。对于您的具体示例,基于规则的框架就足够了(请参阅 )。也可以将 OWL 与临时程序扩展相结合,以处理 OWL 无法表达的内容。例如,如果你想表示物理系统的知识,其中数值根据算术公式相关,OWL 不能帮助你(例如,加速度和外力之间的关系)。但是您可以将具有数据类型属性的 OWL class 层次结构与物理公式的临时实现结合起来以涵盖这种情况。

OWL 就可以涵盖知识表示方面的许多用例,但总的来说,认为 ontology 将对任何问题所需的所有知识进行编码是一种谬论你面对的。必须有编程代码来处理知识表示形式主义无法处理的差距。

如果你有一个特定的人 ex:p,你可以在 OWL 中说这个人和谁是朋友,如下所示(在 Turtle 语法中):

[ 
  a owl:Restriction;
  owl:onProperty ont:isFriendWith;
  owl:hasValues ex:p
]
    owl:intersectionOf (
      [
        a owl:Restriction;
        owl:onProperty [ owl:inverseOf ont:sendsFriendRequestTo ];
        owl:hasValue ex:p
      ]
      [
        a owl:Restriction; 
        owl:onProperty ont:acceptsFriendRequestFrom;
        owl:hasValue ex:p
      ]
    ) .