我想用Protege创建一个包含两个类的本体,分别是Animal和FatherAnimal,对象属性hasFather,域为Animal,范围为FatherAnimal。

另外,我还创建了另外两个类:Son和Father,它们与相同的对象属性hasFather链接。这里的问题是我不允许为同一对象属性创建多个域和范围。我真的很想避免创建一个新的对象属性。还有其他解决方案吗?

最佳答案

目前还不清楚是什么问题。您可以向对象属性添加多个域和范围,但解释是交叉点。举例来说,这就是说

hasFather rdfs:domain Son
hasFather rdfs:domain Animal


每当你有

X hasFather Y


您将能够推断

X rdf:type Son
X rdf:type Animal


这可能不是您想要的。

如我所见,您可以执行以下操作:


不要在hasFather上声明任何域或范围。没有必要这样做。您可以只声明该属性,然后在您认为合适的情况下使用它。


如果您想使用更多类型推断,那么还可以添加两个子类公理:

儿子SubClassOf(只有父亲父亲)
Animal SubClassOf(仅具有父亲AnimalFather)

这些公理说,如果某物是儿子,并且通过hasFather属性与某物相关,那么该物就是父的实例。类似地,如果某物是动物,并且通过属性hasFather与某物相关,则该物是AnimalFather的实例。

08-25 21:13