从生产者-消费者 OWL 模型中实现和检索信息

Realizing and Retrieving information from a producer-consumer OWL model

我在 OWL 中模拟了以下场景:

Producer ----producesResource---> Resource <------consumesResource ---- Consumer

ProducerResourceConsumer 是 OWL 类,而 producesResourceconsumesResource 是对象属性。该场景非常直观,因为每个生产者生产一种或多种资源,供一个或多个消费者使用。相反,每个消费者可以消费一个或多个资源。 ontology 相应地填充了实例/个体。

我想检查是否存在由消费者使用但不是由生产者生产的资源。通过以下方式获取此信息的优雅方式是什么:

  1. 在 SPARQL 中查询
  2. SHACL 形状图(如果可能)。

在 SPARQL 中使用 NOT BOUND 过滤器可以进行否定,或者在 SPARQL 1.1 中使用 MINUS 更容易:

SELECT ?resource WHERE
{
  ?resource a :Resource.

  ?consumer a :Consumer;
    ?consumer :consumesResource ?resource.

 MINUS {?producer a :Producer; :producesResource ?resource.}
}

您也可以使用 ASK 获得布尔结果,但 SELECT 可以更轻松地调试以验证您的查询是否正常工作。

由于 SHACL 允许集成 SPARQL 查询,这也回答了您的第二个问题,但在那种情况下,单独使用 SPARQL 查询会更容易。