这是关于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中不起作用?还有其他我错过的东西吗?
答案 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 results的the 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工作。)