Virtuoso 7.x中的默认RDFS推断

时间:2016-08-11 17:42:10

标签: sparql virtuoso inference

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

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

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

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 . }

我得到零结果。为什么子属性推断在DBpedia中不起作用?还有其他我错过的东西吗?

2 个答案:

答案 0 :(得分:2)

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 .
}

答案 1 :(得分:2)

你错过了几件事。

首先,Virtuoso位于7.2.4 as of April 2016,由于多种原因,强烈建议使用此版本而不是2014年的旧版本。

@ AKSW关于Property Paths的建议也会在以后的版本中运行得更好。

然后,您可以在DBpedia端点(包括您的本地镜像)上通过the input:inference pragma使用推理,如live resultsthe query shown below所示 - -

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的制作人Virtuoso工作。)