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 工作。)
这是一个关于 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 --
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 工作。)