【发布时间】:2018-12-11 11:33:51
【问题描述】:
无法让此 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
【问题讨论】:
-
这与您上一个问题中的问题相同...旧版本的 DBpedia 和 SERVICE 子句必须先从端点收集所有数据,然后才能执行聚合函数。正如上次建议的那样,您应该联系维护人员并建议更新到最新的 Virtuoso。如果您不想这样做,无论出于何种原因,请随时将 DBpedia 下载到您自己的本地 Virtuoso 实例中
-
好的,但是
group_concat与distinct一起使用——只是更贵。它是 SPARQL 标准的一部分。主要问题仍然存在,Virtuoso 版本太旧,您不能只在意大利 DBpedia 端点上运行查询,因为它根本不支持group_concat。这很奇怪,说实话我不知道不更新的原因。 -
此外,当您运行已在其端点上使用
sql:group_concat解决方法的查询时,您将收到错误Virtuoso 22023 Error SR319: Max length of a temp row (9206) exceeded- 设置较新版本并检查配置设置。 -
我只能说 1)这里的整个查询在意大利 DBpedia 端点上不起作用 2)在意大利 DBpedia 端点上运行时,只有三重模式的查询不是空的,所以3) 我确定 SERVICE 子句尝试检索所有数据并执行分组部分,但由于 Virtuoso 随时功能而停止执行。显然,Virtuoso 的维护者和开发者,比如用户 TallTed 可能会给你一个更好的答案。而且您仍然可以托管自己的意大利 DBpedia 实例。幸运的是,数据 + 三重存储是免费的
-
正如@AKSW 所说,这里问题的根源是提供意大利 DBpedia 端点的非常古老的 Virtuoso(
06.01.3127于 2014 年 9 月 15 日建成)。您最好的直接选择是说服 Marco 等人升级该 Virtuoso。也就是说,请注意 it.dbpedia.org 被配置为仅返回 1000 个结果——因此对于具有较大解决方案集的查询(包括这一解决方案集),您将无法获得完整的结果,因此您可能需要重新考虑您的流程。