【发布时间】:2015-06-04 15:05:00
【问题描述】:
根据 protege 4.x 文档,对象属性存在属性链,但在我的情况下,我需要包含如下数据属性:
if builds(B, A) o has_name(A, "Holly wood") -> has_name(B, "Holly wood")
稍微解释一下,假设我们有一条名为“Hollywood”的街道。这条街道由几段(一段是交叉路口之间的街道的一部分)组成,其名称应与街道名称“Hollywood”相同。 请注意,街道概念与段不同,因此它们不是子类,但它们具有上述关系(构建)。
一种解决方案是将 has_name 设为 Object 属性,然后每个名称都应该是一个对象(实例)。
if is_name_of(name, A) o is_built_of(A, B) -> is_name_of(name, B)
这对我来说似乎不太好,因为我认为使用数据类型更好。
另一种解决方案是使用 SWRL,如下所示:
Thing(?p), Thing(?q), builds(?q, ?p), has_name(?p, ?name) -> has_name(?q, ?name)
这行不通!!!! 您能帮我找出原因或找到合适的解决方案吗?
【问题讨论】:
-
哪方面不行?您使用的是支持 SWRL 的推理器吗?
-
@Ignazio:我正在使用 Fact++ 和 HermiT 1.3.8,但我不确定它们是否支持。事实上,我不知道我需要寻找有 swrl 能力的推理者。
-
那是因为 swrl 不是 owl 的一部分,它是一个单独的规范。 HermiT 支持 swrl 规则,但 fact++ 不支持。
-
我使用了 HermiT,但没有推断出我想要什么......现在颗粒正在做这项工作:D
标签: instance owl chain protege4 swrl