我有一个SPARQL查询,它返回两个资源的最具体的公共类。
当我尝试在https://dbpedia.org/sparql上运行它时,有时它不会返回任何内容,有时它会返回我想要的类。
我注意到它与查询中语句的顺序有关。
这不是一个理想的行为,因为当我执行查询时,无论输入资源URI的顺序如何,我都希望它具有相同的结果。
有没有人遇到过这个问题,并为此找到了解决方案?
查询
以下查询正常运行,返回http://dbpedia.org/ontology/Film和http://dbpedia.org/ontology/Wikidata:Q11424作为结果:
SELECT ?lcs
WHERE
{
<http://dbpedia.org/resource/Ice_Age_(2002_film)> a ?class1 .
?class1 rdfs:subClassOf* ?lcs .
<http://dbpedia.org/resource/Finding_Nemo> a ?class2 .
?class2 rdfs:subClassOf* ?lcs .
FILTER NOT EXISTS {
<http://dbpedia.org/resource/Finding_Nemo> a ?class3 .
?class3 rdfs:subClassOf* ?sublcs .
<http://dbpedia.org/resource/Ice_Age_(2002_film)> a ?class4 .
?class4 rdfs:subClassOf* ?sublcs .
?sublcs rdfs:subClassOf ?lcs
}
FILTER strstarts(str(?lcs), "http://dbpedia.org/ontology")
}
但是,以下查询不返回任何内容:
SELECT ?lcs
WHERE
{
<http://dbpedia.org/resource/Finding_Nemo> a ?class1 .
?class1 rdfs:subClassOf* ?lcs .
<http://dbpedia.org/resource/Ice_Age_(2002_film)> a ?class2 .
?class2 rdfs:subClassOf* ?lcs .
FILTER NOT EXISTS {
<http://dbpedia.org/resource/Finding_Nemo> a ?class3 .
?class3 rdfs:subClassOf* ?sublcs .
<http://dbpedia.org/resource/Ice_Age_(2002_film)> a ?class4 .
?class4 rdfs:subClassOf* ?sublcs .
?sublcs rdfs:subClassOf ?lcs
}
FILTER strstarts(str(?lcs), "http://dbpedia.org/ontology")
}
答案 0 :(得分:1)
您正在公共端点上运行查询,该端点具有各种自我保护设置。这意味着昂贵的查询可能会产生部分或无结果,而廉价的查询可能会产生完整的结果。您可以设置自己的镜像端点(quick-and-easy on Amazon EC2),但没有这样的保护,您应该看到等效查询的等效结果。
@AKSW为您的查询提供了一个快速生成完整结果的调整 -
将
FILTER strstarts(str(?sublcs), "http://dbpedia.org/ontology")
添加到NOT EXISTS
部分
(请参阅query form和live results)
SELECT ?lcs
WHERE
{
<http://dbpedia.org/resource/Finding_Nemo> a ?class1 .
?class1 rdfs:subClassOf* ?lcs .
<http://dbpedia.org/resource/Ice_Age_(2002_film)> a ?class2 .
?class2 rdfs:subClassOf* ?lcs .
FILTER NOT EXISTS {
<http://dbpedia.org/resource/Finding_Nemo> a ?class3 .
?class3 rdfs:subClassOf* ?sublcs .
<http://dbpedia.org/resource/Ice_Age_(2002_film)> a ?class4 .
?class4 rdfs:subClassOf* ?sublcs .
?sublcs rdfs:subClassOf ?lcs
FILTER strstarts( str(?sublcs), "http://dbpedia.org/ontology" )
}
FILTER strstarts( str(?lcs), "http://dbpedia.org/ontology" )
}
(ObDisclaimer:OpenLink Software生成Virtuoso,它为DBpedia端点和AMI referenced above提供支持。他们也雇佣我。)