SPARQL查询执行但返回空

时间:2018-12-11 11:33:51

标签: sparql dbpedia virtuoso

无法获得此SPARQL查询以返回结果:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT 
  ?team
  ?club
  (sql:group_concat(?coach, ";;;") as ?coaches) 
  (sql:group_concat(?president, ";;;") as ?presidents) 
  (sql:group_concat(?scorer, ";;;") as ?scorers)
  ?date 
  ?position 
  WHERE {
  SERVICE <http://it.dbpedia.org/sparql/> {
     ?value rdfs:label "Campionato italiano di calcio Serie A"@it .
     ?year <http://purl.org/dc/terms/subject> ?value . 
     ?team <http://dbpedia.org/ontology/league> ?year .
     ?team <http://it.dbpedia.org/property/presidente> ?president .
     ?team <http://dbpedia.org/ontology/coach> ?coach .
     ?team <http://it.dbpedia.org/property/campionatoPosizione> ?position .
     ?team <http://it.dbpedia.org/property/stagione> ?date .
     ?team <http://it.dbpedia.org/property/club> ?club .
     OPTIONAL { ?team <http://it.dbpedia.org/property/marcatori> ?scorer }
     FILTER( 1946 < ?date )
  }} group by ?team ?date ?position ?club LIMIT 1

用于运行该服务的服务是URIBURNER

2 个答案:

答案 0 :(得分:1)

如评论中所述-

问题的根源是非常古老的Virtuoso(2014年9月15日建立的06.01.3127),提供了意大利DBpedia端点。最好的立即选择是说服Marco等人升级该Virtuoso。

也就是说,请注意页面上显示“(查询结果限于1000条记录)”。这意味着结果集将在1000条记录处被截断,类似于从LIMIT 1000 OFFSET 0获得的结果。(您可以通过LIMIT 1000 OFFSET 1000获得下一个1000。这将是一个重新思考的过程...)

答案 1 :(得分:0)

使用URI Burner是否有原因?

您的查询仅从意大利语DBpedia端点提取数据,因此:

  1. 请勿使用SERVICE子句;
  2. 只需在http://it.dbpedia.org/sparql上运行它即可!

另请参阅https://stackoverflow.com/a/53529798/10719765

此外,查询结果集明确地限制为 1,000 行:这还意味着避免查询执行超时。

如果查询超时,则需要通过OFFSETLIMIT实现分页机制。例如:

SELECT ?musician
WHERE { ?musician a <http://dbpedia.org/ontology/MusicalArtist> . }
OFFSET 0
LIMIT 1000

下一页将是OFFSET 1000 LIMIT 2000,依此类推。