我试图在我的本体中指定一个约束:假设我有 A、B 和 C 类以及对象属性“A hasB B”和“B hasC C”。我想指定一个约束条件,即 A 的每个个体“a”都与 C 中的至少一个间接相关,即存在 b、c 即“a hasB b”和“b hasC c”。
是否可以在 OWL 中执行此操作?如果不是,您能否建议一些使这种验证成为可能的技术?
您不能像您试图做的那样开箱即用地使用 OWL 作为约束语言。OWL 具有OWA(开放世界假设),这使得表达约束非常棘手。有一些系统,例如 Pellet 的Integrity Constraints,它允许您通过关闭世界来使用 OWL 作为约束语言,稍微改变语义。
只需使用类等价:
A equivalentTo (hasB some B)
B equivalentTo (hasC some C)
这表明A中的所有a在B中存在b:a有B b,B中的所有b在C中存在c:b有C c。
您可以执行以下操作(使用 Turtle 语法):
:A rdfs:subClassOf [
a owl:Restriction;
owl:onProperty :hasB;
owl:someValuesFrom [
a owl:Restriction;
owl:onProperty :hasC;
owl:someValuesFrom :C
]
] .
我对曼彻斯特语法不是很了解,但它一定是这样的:
A subClassOf (hasB some ( hasC some C ))
同样,正如其他人指出的那样,个人的存在并不意味着在数据的任何地方都提到了这个人。