属性链接数据属性

时间:2015-06-04 15:05:01

标签: instance owl chain protege4 swrl

根据protege 4.x文档,对象属性存在属性链,但在我的情况下,我需要包含一个数据属性,如下所示:

if builds(B, A) o has_name(A, "Holly wood") -> has_name(B, "Holly wood")

为了解释一下,想象一下,我们有一条名为" Holly wood"的街道。这条街道由几个区段构成(一个区段是街道之间的一部分),其名称应与街道名称相同" Holly wood"。 请注意,街道概念与细分不同,因此它们不是子类,但它们具有上述关系(构建)。

一种解决方案是使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)

这不起作用!!!! 你能帮我找出原因或找到合适的解决方案吗?

1 个答案:

答案 0 :(得分:2)

我认为SWRL规则 是适当的解决方案。正如您所指出的,您不能在子属性链公理中使用data属性,但您需要为了获得您正在寻找的行为。对象子属性公理和数据子属性公理的结构规范是:

  

9.2.1 Object Subproperties

SubObjectPropertyOf := 'SubObjectPropertyOf' '(' axiomAnnotations subObjectPropertyExpression superObjectPropertyExpression ')'  
subObjectPropertyExpression := ObjectPropertyExpression | propertyExpressionChain
propertyExpressionChain := 'ObjectPropertyChain' '(' ObjectPropertyExpression ObjectPropertyExpression { ObjectPropertyExpression } ')'

  

9.3.1 Data Subproperties

SubDataPropertyOf := 'SubDataPropertyOf' '(' axiomAnnotations subDataPropertyExpression superDataPropertyExpression ')'
subDataPropertyExpression := DataPropertyExpression
superDataPropertyExpression := DataPropertyExpression

OWL 2根本没有混合对象和数据类型属性的属性链表达式。因此,您需要使用SWRL规则。您可以使用这样的规则(不需要使用 Thing(?p)∧Thing(?q),因为每个人都自动为 owl:Thing ):

构建(?q,?p)∧has_name(?p,?name)→has_name(?q,?name)