我想用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的实例。