OWLontology是否可以实现?

Is it possible to implement it by OWL ontology?

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

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 定义来实现。

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

@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确定了所有已完成事物的class,然后将_:replaced-by定义为:replaces的倒数。 属性 是可传递的(因此通过扩展 :replaces 也是可传递的)。

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

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