SPARQL 查询 returns 不同的结果取决于语句的顺序
SPARQL query returns different results depending on the order of statements
我有一个 SPARQL 查询,其中 returns 两个资源中最具体的 类。
当我在 https://dbpedia.org/sparql 上尝试 运行 时,有时它 returns 什么都没有,而其他时候它 returns 我想要的 类。
我注意到它与查询中语句的顺序有关。
这不是理想的行为,因为当我执行查询时,无论我输入资源 URI 的顺序如何,我都希望它有相同的结果。
有没有人遇到过这个问题并找到了解决方案?
查询
以下查询正常工作,返回 http://dbpedia.org/ontology/Film and 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")
}
但是,下面的查询returns什么都没有:
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")
}
您是 运行 您在 public 端点上的查询,该端点具有多种自我保护设置。这意味着昂贵的查询可能会产生部分结果或没有结果,而廉价的查询可能会产生完整的结果。您可以在没有此类保护的情况下设置自己的镜像端点 (quick-and-easy on Amazon EC2),您应该会看到等效查询的等效结果。
@AKSW 对您的查询进行了调整,可以快速生成完整结果 --
add FILTER strstarts(str(?sublcs), "http://dbpedia.org/ontology")
to the NOT EXISTS
part
(参见 query form and 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 produces Virtuoso, which powers the DBpedia endpoint, and the AMI referenced above。他们也雇用我。)
我有一个 SPARQL 查询,其中 returns 两个资源中最具体的 类。
当我在 https://dbpedia.org/sparql 上尝试 运行 时,有时它 returns 什么都没有,而其他时候它 returns 我想要的 类。
我注意到它与查询中语句的顺序有关。
这不是理想的行为,因为当我执行查询时,无论我输入资源 URI 的顺序如何,我都希望它有相同的结果。
有没有人遇到过这个问题并找到了解决方案?
查询
以下查询正常工作,返回 http://dbpedia.org/ontology/Film and 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")
}
但是,下面的查询returns什么都没有:
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")
}
您是 运行 您在 public 端点上的查询,该端点具有多种自我保护设置。这意味着昂贵的查询可能会产生部分结果或没有结果,而廉价的查询可能会产生完整的结果。您可以在没有此类保护的情况下设置自己的镜像端点 (quick-and-easy on Amazon EC2),您应该会看到等效查询的等效结果。
@AKSW 对您的查询进行了调整,可以快速生成完整结果 --
add
FILTER strstarts(str(?sublcs), "http://dbpedia.org/ontology")
to theNOT EXISTS
part(参见 query form and 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 produces Virtuoso, which powers the DBpedia endpoint, and the AMI referenced above。他们也雇用我。)