如何避免 Wikidata - SPARQL 中特定查询超时:SELECT DISTINCT 属性的所有类型值?

问题描述 投票:0回答:1

我想获取所有实体的 P31 属性的所有 DISTINCT 类型值。例如 : enter image description here

这里的查询:

SELECT DISTINCT ?item ?itemLabel ?itemDescription
WHERE {  

  VALUES (?property) {
     (wdt:P31)
  }  
  ?article schema:about ?item .
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr". }
  
}LIMIT 100

https://query.wikidata.org/#SELECT%20DISTINCT%20%3Fitem%20%3FitemLabel%20%3FitemDescription%0AWHERE%20%7B%20%20%0A%0A%20%20VALUES%20%28 %3F属性%29%20%7B%0A%20%20%20%20%20%28wdt%3AP31%29%0A%20%20%7D%20%20%0A%20%20%3Farticle%20schema%3Aabout %20%3Fitem%20.%0A%20%20%0A%20%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22fr%22.%20%7D%0A%20 %20%0A%7DOFFSET%200%20LIMIT%20100

结果是异常超时:

SPARQL-QUERY: queryStr=SELECT DISTINCT ?item ?itemLabel ?itemDescription
WHERE {  

  VALUES (?property) {
     (wdt:P31)
  }  
  ?article schema:about ?item .
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr". }
  
}LIMIT 100
java.util.concurrent.TimeoutException
    at java.util.concurrent.FutureTask.get(FutureTask.java:205)
    at com.bigdata.rdf.sail.webapp.BigdataServlet.submitApiTask(BigdataServlet.java:292)
    at com.bigdata.rdf.sail.webapp.QueryServlet.doSparqlQuery(QueryServlet.java:678)
    at com.bigdata.rdf.sail.webapp.QueryServlet.doGet(QueryServlet.java:290)
    at com.bigdata.rdf.sail.webapp.RESTServlet.doGet(RESTServlet.java:240)
    at com.bigdata.rdf.sail.webapp.MultiTenancyServlet.doGet(MultiTenancyServlet.java:273)
sparql wikidata-query-service
1个回答
0
投票

在其他有问题的评论的帮助下,这里是正确的查询:

SELECT ?type ?typeLabel WHERE {
  {
    SELECT DISTINCT ?type WHERE { ?item wdt:P31 ?type. }
    OFFSET 0 LIMIT 10000
  }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr". }
}
© www.soinside.com 2019 - 2024. All rights reserved.