我正在尝试使用 Protege 创建 OWL 本体。我想使用反函数属性作为关系数据库中主键的相似之处。例如,我有一个属性,它有一个唯一的 id 作为对象,从而标识实体,并且不允许其他实体将这个值与该属性一起使用。
由于对象值是一个字符串,它必须是一个数据属性。但是在 Protege 中,您不能将反函数特征分配给数据属性。
为什么我不能将一个数据属性声明为一个反函数属性,我还应该如何创建“唯一键”如果不是这样的逻辑?
提前致谢,
弗兰克
最佳答案
对数据类型属性的限制纯粹是由于计算复杂性。没有限制,OWL 2 DL 的逻辑将不可判定。但是,可以在 OWL 2 中表达唯一键的概念:
ex:key a owl:DatatypeProperty .
owl:Thing owl:hasKey ( ex:key ) .
但是,这与反函数属性之间存在细微差别。请考虑以下事项:
ex:this a [
a owl:Restriction;
owl:onProperty ex:prop;
owl:minCardinality 2;
owl:onClass [
a owl:Restriction;
owl:onProperty ex:key;
owl:hasValue 1
]
] .
如果ex:key
是owl:Thing
的键,那么这个本体是一致的。然而,如果 ex:key
可以是一个反函数属性,那么这个本体就不会是一致的。原因在于 OWL 2 中键的工作方式。对于识别某物的键,必须明确命名该事物。可能有几个未命名的东西具有相同的键(这里,键是数字 1
),但是,只要它们没有在本体中明确声明,它们就不会被认为是相等的。然而,对于反函数性质,情况并非如此。因此,我们将能够推断属性 ex:key
上的所有值为 1
的东西都是同一事物,因此,ex:this
属性 ex:prop
不能有 2 个值。
关于properties - OWL:为什么数据属性不能是 InverseFunctionalProperty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43343900/