我刚开始使用Protégé4.3学习OWL,现在我遇到了一个难题。我已经定义了一个带有一些限制超类的A类,它确保每个A都具有P1和P2的属性值,并且每个P1和P2都有一个双倍的值:
A⊑⊑hasProperty。(P1⊓ ∃hasValue.xsd:双)
A⊑⊑hasProperty。(P2 ⊓⊓hasValue.xsd:double)
如何断言A的P1值都小于所有P2值?
答案 0 :(得分:1)
这是一个有趣的问题,但不幸的是,你可以使用纯OWL公理来解决这个问题。一般来说,通过使用限制超类很容易说出类的个体所具有的价值,但很难或不可能对属性值之间的关系说些什么。例如,您不能说某个人的姓氏属性必须与姓氏属性的值相同。
清理一些术语非常重要,首先,尤其是限制这一术语:
我想定义一个限制,对于A的所有个体,p1的值是 总是小于p2的值
限制是类。例如,限制likes some Person
是个人的类,每个人都喜欢某个人。我们经常使用限制作为其他类的超类来确保某些约束成立。例如,我们说的时候
Person subClassOf hasName some xsd:string
我们说每个人都有属性hasName的值xsd:string。
你可以断言,如果某个东西是A的成员并且有p1和p2值,那么p1必须小于p2。这看起来像是:
A(?a)∧
(V1,V2?)
hasProperty(?a,?p1)∧P1(?p1)∧withValue(?p1,?v1)∧
hasProperty(?a,?p2)∧P2(?p2)∧withValue(?p2,?v2)
→
swrlb:每种不超过
这将确保A上的每个P1值都小于A上的每个P2值。如果您声明某些违反此值的数据,则会出现不一致。