1

我的问题是,如果我想检查一个实例是否在范围内,我使用以下规则:

Rule1: Error(?d), TimeRelatedError(?c), TimeRelatedError_start_at(?c, ?s), error_at(?d, ?b), greaterThan(?b, ?s) -> is_after_TimeRelatedError_start(?d, true)
Rule2: Error(?d), TimeRelatedError(?c), TimeRelatedError_end_at(?c, ?e), error_at(?d, ?b), lessThan(?b, ?e) -> is_before_TimeRelatedError_end(?d, true)

如果我的本体中只有一个 TimeRelatedError ,它会起作用,如果我有更多实例,它将始终触发 true (因为 TimeRelatedError 之一总是在开始/结束点之前/之后)。您对如何解决这个问题有任何想法吗?我想如果我以某种方式将我的 TimeRelatedError 分配给 Error 实例,我可以解决这个问题,但我不知道如何。请 OWL/SWRL 专业人员帮助我完成这项任务 :)

4

1 回答 1

0

我只能责怪自己,我找到了解决方案,只有一条规则:

Error(?d), TimeRelatedError(?c), TimeRelatedError_start_at(?c, ?s), error_at(?d, ?b), greaterThan(?b, ?s), TimeRelatedError_end_at(?c, ?e), error_at(?d, ?b), lessThan(?b, ?e) -> in_range(?d, true)

它之所以有效,是因为只有当语句 (greaterThan) 为真时才会调用大于之后的所有内容,最后如果结尾也小于,我们可以将其称为 in_range。我把它留在这里,因为其他人偶然发现了同样的问题。

于 2019-08-06T17:22:46.107 回答