属性链用于数据属性



根据被保护人4。x文档的属性链存在的对象属性,但在我的情况下,我需要包括如下的数据属性:

if builds(B, A) o has_name(A, "Holly wood") -> has_name(B, "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)

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

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

9.2.1对象子属性
SubObjectPropertyOf := 'SubObjectPropertyOf' '(' axiomAnnotations subObjectPropertyExpression superObjectPropertyExpression ')'  
subObjectPropertyExpression := ObjectPropertyExpression | propertyExpressionChain
propertyExpressionChain := 'ObjectPropertyChain' '(' ObjectPropertyExpression ObjectPropertyExpression { ObjectPropertyExpression } ')'

9.3.1数据子属性
SubDataPropertyOf := 'SubDataPropertyOf' '(' axiomAnnotations subDataPropertyExpression superDataPropertyExpression ')'
subDataPropertyExpression := DataPropertyExpression
superDataPropertyExpression := DataPropertyExpression

owl2没有混合对象和数据类型属性的属性链表达式。因此,您需要使用SWRL规则。您可以使用这样的规则(不需要使用Thing(?p) ∧Thing(?q),因为每个个体都是一个猫头鹰:Thing):

,,,,,,,,构建(?Q, ?p) ∧has_name (?P, ?name) &右箭头;has_name (?问,?名字)

相关内容

  • 没有找到相关文章

最新更新