2

我刚开始使用 Protégé 4.3 学习 OWL,现在我面临一个难题。我已经定义了一个具有一些限制超类的 A 类,以确保每个 A 具有来自 P1 和 P2 的属性值,并且每个 P1 和 P2 具有一个双精度值:

A ⊑ ∃hasProperty.(P1 ⊓ ∃hasValue.xsd:double)
A ⊑ ∃hasProperty.(P2 ⊓ ∃hasValue.xsd:double)

我如何断言 A 的 P1 值都小于所有 P2 值?

4

1 回答 1

1

OWL Axioms 无法做到这一点

这是一个有趣的问题,但不幸的是,您无法使用纯 OWL 公理来解决这个问题。通常,通过使用限制超类,很容易说出类个体所具有的值,但很难或不可能说出属性值之间的关系。例如,您不能说一个人的姓氏属性必须与姓氏属性的值相同。

不过,首先澄清一些术语很重要,尤其是术语限制

我想定义一个限制,对于 A 的所有个体,p1 的值总是小于 p2 的值

限制是一个。例如,限制likes some Person是每个人都喜欢某个人的个人类别。我们经常使用限制作为其他类的超类来确保某些约束成立。例如,当我们这么说时

Person subClassOf hasName 一些 xsd:string

我们是说每个人都有一个属性 hasName 的值,它是一个 xsd:string。

你可能可以用 SWRL 做到这一点

您可以断言,如果某物是 A 的成员并且具有 p1 和 p2 值,则 p1 必须小于 p2。这看起来像:

A(?a) ∧
hasProperty(?a,?p1) ∧ P1(?p1) ∧ hasValue(?p1,?v1) ∧
hasProperty(?a,?p2) ∧ P2(?p2) ∧ hasValue(?p2, ?v2)

swrlb:lessThan(?v1,?v2)

这将确保 A 上的每个 P1 值都小于 A 上的每个 P2 值。如果您曾经断言某些数据违反了这一点,那么就会出现不一致。

于 2014-05-15T19:13:06.130 回答