首页 > 解决方案 > OWL本体可以实现吗?

问题描述

您能否告诉我,是否可以仅通过 OWL 本体定义来实现这种情况?或者我需要为它创建自定义规则?

IF
  ?doc rdf:type :document
  AND ?doc :state :completed
  AND not exists { ?other-doc :replaces+ ?doc AND ?other-doc :state :completed }
THEN
  ?doc rdf:type :latest-document

因此,想法是将推断:latest-document类型分配给所有rdf:type :document具有:state = :completed且没有任何较新实体的实体:state = :completed。我想知道,如果这种情况太复杂而无法仅通过 OWL 定义来实现它。

标签: rdfowl

解决方案


当然!复杂的部分可能是如何最好地描述被替换的关系:

@prefix owl: <http://www.w3.org/2002/07/owl#> .

_:completed-thing a owl:Restriction ;
  owl:onProperty :state ;
  owl:hasValue :completed .

_:replaced-by a owl:TransitiveProperty ;
  owl:inverseOf :replaces .

_:replaced-thing a owl:Restriction ;
  owl:onProperty _:replaced-by ;
  owl:someValuesFrom :completed-thing .

_:latest-thing owl:complementOf _:replaced-thing .

这首先通过 标识所有已完成事物的类owl:hasValue,然后定义_:replaced-by为 的倒数:replaces。该属性是可传递的(因此通过扩展:replaces也可以传递)。

接下来我们定义一个被替换的东西,这是任何被上面定义的至少一个完成的东西所替换的东西。最新的东西就是任何没有被替换的东西。

我没有包含与:document您指定的交集,因为它会使答案的核心部分复杂化。:replaces但是,如果并且:state已经仅在文档上有效,则不需要它,并且owl:intersectionOf无论如何使用它都是一件简单的事情。


推荐阅读