根据 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)
这不起作用!!!!你能帮我找出原因或找到合适的解决方案吗?