为什么wikidata sparql超时?

为什么wikidata sparql超时?,sparql,wikidata,Sparql,Wikidata,这似乎相对简单,要问巴拉克·奥巴马的出生日期,为什么要花这么长的时间才能超时?只有3个实体贴上了巴拉克·奥巴马的标签,还有2个实体贴上了“出生日期”的标签 正确答案是 SELECT DISTINCT ?ent ?wdtProperty1 ?val WITH { SELECT ?wdtProperty1 WHERE { [] rdfs:label|skos:altLabel "date of birth"@en; wikibase:direc

这似乎相对简单,要问巴拉克·奥巴马的出生日期,为什么要花这么长的时间才能超时?只有3个实体贴上了巴拉克·奥巴马的标签,还有2个实体贴上了“出生日期”的标签


正确答案是

SELECT DISTINCT ?ent ?wdtProperty1 ?val
WITH
{
  SELECT ?wdtProperty1
  WHERE
  {
    [] rdfs:label|skos:altLabel "date of birth"@en; 
       wikibase:directClaim ?wdtProperty1. 
  }
} AS %get_predicate
WITH
{
  SELECT ?ent
  WHERE
  {
    ?ent rdfs:label|skos:altLabel "Barack Obama"@en. 
  }
} AS %get_subject
WHERE
{ 
  INCLUDE %get_predicate
  INCLUDE %get_subject
  ?ent ?wdtProperty1 ?val .
}

由于

Blazegraph无法将POS索引用于这些可选属性路径,我猜。试试看。@StanislavKralin嘿,非常感谢。它确实变得更快了。实际上,以前我的查询使用的是您的方式,但速度很慢,然后我改为其他路径。为了得到所有结果,我必须为每个三元组使用不同的?标签,否则结果集将减少,我不知道为什么。但是通过对每个三元组使用不同的标签,它变得非常缓慢。我将在下一条评论中附上这个问题,这个问题是为了找出信仰佛教的人。@StanislavKralin你知道如何提高这个问题的效率吗?目前需要17秒
SELECT DISTINCT?ent?wdtProperty?val?valLabel WHERE{VALUES?label1{rdfs:label skos:altLabel}?val wdt:P31 | wdt:P106[?label1'people'@en]。?val?wdtProperty 2?ent2.值?labelB2{rdfs:label skos:altLabel}?ent2?labelB2“佛教”@en.?wdProperty2 wikibase:directClaim?wdtProperty2.VALUES?label2{rdfs:label skos:altLabel}?wdProperty2?label2“宗教”@en.可选的{val rdfs:label?valLabel筛选器(lang(?valLabel)=“en”)}限制10
@William此查询的目的是什么?看起来好像把一些变量名弄混了<代码>?wdProperty2与
?wdProperty
<代码>?wdProperty已选择但从未绑定?和
?wdProperty2 wikibase:directClaim?wdtProperty2.
应该做什么?总之:
选择?项?项标签?a?ent{提示:查询提示:优化器“无”。值?标签{rdfs:label skos:altLabel}?prop wikibase:directClaim?a。?属性标签“宗教”@en。?项?a?ent.VALUES?labelB2{rdfs:label skos:altLabel}ent?labelB2“佛教”@en.VALUES?label1{rdfs:label skos:altLabel}?item wdt:P31[?label1'people'@en]。可选{item rdfs:label?itemLabel FILTER(lang(?valLabel)=“en”)}限制10
SELECT DISTINCT ?ent ?wdtProperty1 ?val
WITH
{
  SELECT ?wdtProperty1
  WHERE
  {
    [] rdfs:label|skos:altLabel "date of birth"@en; 
       wikibase:directClaim ?wdtProperty1. 
  }
} AS %get_predicate
WITH
{
  SELECT ?ent
  WHERE
  {
    ?ent rdfs:label|skos:altLabel "Barack Obama"@en. 
  }
} AS %get_subject
WHERE
{ 
  INCLUDE %get_predicate
  INCLUDE %get_subject
  ?ent ?wdtProperty1 ?val .
}