【发布时间】:2018-04-28 09:34:04
【问题描述】:
您好,我正在使用 SPARQL 查询 LMDB (http://data.linkedmdb.org/snorql/),并且我一直在尝试获取返回某些查询结果时的实例数。我一直在尝试将(COUNT(?something) AS ?somethingElse) 添加到我的查询中,然后将GROUP or ORDER BY 添加到我的查询中,但是变量?somethingElse 替换了所有其他结果。我认为最好的方法是使用UNION 并在单独的行中获取结果,这与其他行无关,但由于某种原因我找不到正确的解决方案。
我的查询:
PREFIX mov: <http://data.linkedmdb.org/resource/movie/>
SELECT DISTINCT ?Names WHERE
{ ?link mov:actor_name 'guy boyd' .
?movie mov:actor ?link;
mov:actor ?Link_To_Actor_Page.
?Link_To_Actor_Page mov:actor_name ?Names. }
如果您运行此查询,一切都很好,但是如果您添加 (COUNT(?Names) AS ?total),则只会打印出 ?total。所以我想我的问题是如何打印出尽可能多的变量并将COUNT(?something) 作为单独的列。基本上没有COUNT(?)在查询中替换所有其他?variable。
【问题讨论】:
-
当然,如果没有 Group BY,则返回解决方案的总数 - 还有什么?如果您按某些
?x分组,则无论如何您都必须选择要返回的内容。例如。SELECT ?x (count(?y) as ?cnt) ... WHERE { ... } GROUP BY ?x。注意,后端是 D2R 服务器,因此没有完整的 SPARQL 1.1 -
@AKSW 是的,你是对的。这确实解决了我的问题。我之前已经尝试过,但由于某种原因我没有注意到它。但是假设我想计算其他问题的出现总数,而不是这个查询,而是另一个。有没有办法打印出
COUNT(?x)而无需ORDER BY一些变量? LMDB 将此技术用于此类目的。 -
@AKSW 这个查询的关键是最后一行
SELECT ?property ?hasValue ?isValueOf WHERE { { <http://data.linkedmdb.org/resource/actor/39599> ?property ?hasValue } UNION { ?isValueOf ?property <http://data.linkedmdb.org/resource/actor/39599> } } ORDER BY (!BOUND(?hasValue)) ?property ?hasValue ?isValueOf -
我不懂你。如果您使用
count,为什么还需要ORDER BY? -
除了获取有关特定演员的数据外,我看不到您通过评论中的查询试图实现什么
标签: sparql semantic-web