【问题标题】:Number of occurrences SPARQL出现次数 SPARQL
【发布时间】: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 { { &lt;http://data.linkedmdb.org/resource/actor/39599&gt; ?property ?hasValue } UNION { ?isValueOf ?property &lt;http://data.linkedmdb.org/resource/actor/39599&gt; } } ORDER BY (!BOUND(?hasValue)) ?property ?hasValue ?isValueOf
  • 我不懂你。如果您使用count,为什么还需要ORDER BY
  • 除了获取有关特定演员的数据外,我看不到您通过评论中的查询试图实现什么

标签: sparql semantic-web


【解决方案1】:

早上,

只需将您需要的内容添加到SELECT 方法。询问的元素数量不限。

这是您的示例更正:

PREFIX mov: <http://data.linkedmdb.org/resource/movie/> 

SELECT DISTINCT ?Names (COUNT(?Names) as ?total)
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 .
} GROUP BY ?Names

这里是 SPARQL 端点的位置:http://www.linkedmdb.org/snorql/

希望对你有所帮助,而不是不理解就给你答案。

【讨论】:

  • 您的查询不符合我的要求。它只会打印出总数,但不会打印出?Names。这正是我所说的,我的问题是,它根本没有帮助。
  • select distinct ?Concept (COUNT(?Concept) as ?total) where {[] a ?Concept} 在 Virtuoso DBPedia 端点上运行良好
  • 确实只是部分答案,因为缺少UNION
  • 也许你需要编辑你的答案。此外,我不查询 DBPedia SPARQL 端点,而是查询 LMDB SPARQL 端点,它拥有 2 个完全不同的数据库。
  • 显然不一样^^ 只是用另一个例子来解释你的错误。理解和改进比得到答案并说声谢谢更好。
猜你喜欢
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多