Virtuoso 中的默认 RDFS 推断 7.x

Default RDFS inference in Virtuoso 7.x

这是一个关于 Virtuoso 7.1 和 DBpedia 中简单 RDFS 推理的问题。我有一个 Virtuoso 实例,它是使用此 link 作为参考安装的。现在,如果我使用以下查询查询端点:

Select ?s 
where { ?s a <http://dbpedia.org/ontology/Cricketer> . }

我得到了 DBpedia 中的板球运动员列表。假设我想要所有运动员(包括所有运动和板球运动员,其中运动员是 rdfs:superClassOf 板球运动员),我只是尝试查询

Select ?s 
where { ?s a <http://dbpedia.org/ontology/Athlete> . }

为此我得到了所有正确答案。但是我对 rdfs:subPropertyOf 有疑问。例如 属性 <http://dbpedia.org/ontology/capital><http://dbpedia.org/ontology/administrativeHeadCity> 的子 属性。所以假设我想要所有的首都和行政首府城市,然后我发出查询

Select ?s ?o 
where { ?s <http://dbpedia.org/ontology/administrativeHeadCity> ?o . }

我得到零结果。为什么 sub属性 推理在 DBpedia 中不起作用?还有什么我错过的吗?

DBpedia 中没有启用自动推理。 DBpedia 本身就是加载到 Virtuoso 中的数据集。

您获得所有具有超类的实例的原因 dbo:Athlete 是子类继承在当前 DBpedia 数据集中完全具体化:

(s rdf:type c1), (c1 rdfs:subClassOf c2) -> (s rdf:type c2)

这意味着对于每个个体 x,DBpedia 数据集包含它所属的所有 类 C - 实际上也包含超级 类。

该过程不是为子属性-继承完成的,即

(s p1 o), (p1 rdfs:subPropertyOf p2) -> (s p2 o)

您可以使用 SPARQL 1.1 属性 路径解决该问题:

SELECT ?s ?o WHERE {
   ?p rdfs:subPropertyOf* <http://dbpedia.org/ontology/administrativeHeadCity> .
   ?s ?p ?o .
}

你错过了几件事。

首先,Virtuoso 在 7.2.4 as of April 2016,强烈推荐此版本而不是 2014 年的旧版本,原因有很多。

@AKSW 关于 属性 路径的建议也适用于此更高版本。

然后,您可以通过the input:inference pragma, as shown on the live results of the query shown below --

在 DBpedia 端点(包括您的本地镜像)上使用推理
DEFINE input:inference "http://dbpedia.org/resource/inference/rules/dbpedia#"

SELECT ?place ?HeadCity 
WHERE
  {
     ?place  <http://dbpedia.org/ontology/administrativeHeadCity>  ?HeadCity
  }
ORDER BY ?place ?HeadCity

您还可以查看 predefined inference rule sets 的列表。

还有...更多 relevant documentation

(ObDisclaimer:我为 OpenLink Software, producer of Virtuoso 工作。)