【问题标题】:Aggregating SPARQL Result聚合 SPARQL 结果
【发布时间】:2017-04-21 04:41:00
【问题描述】:

我在自己的本体上编写了一个 SPARQL 查询,它给出了重复记录,为此我还使用了 group_concat,我的查询是

SELECT ?Movie (str(?y) as ?Rating) (group_concat (?z;separator=",") as ?Director) 
{ ?Movie :rating ?y;
         :directedBy ?z
 FILTER regex(str(?Movie),'Fantastic_Four') }
  GROUP BY ?y ?Movie

这个查询给了我想要的结果,但是 Director 的输出如下:

http://www.semanticweb.org/administrator/ontologies/2017/2/Ontology-Schema_Movie#Josh_Trank,http://www.semanticweb.org/administrator/ontologies/2017/2/Ontology-Schema_Movie#Joshua_Trank

我想知道为什么会出现整个 URI,如何删除它并在我的结果中只打印 Josh_Trank、Joshua_Trank?

【问题讨论】:

  • 1.顺便说一句,group_concat(distinct ?z; …) 是一个相当合法的结构。 2. 虽然来自 AKSW 答案的变体 2 当然更可取,但您可能对 afn:localname alternative definition(或 afn:localname 本身)感兴趣。

标签: sparql owl


【解决方案1】:

RDF 资源由 URI 标识,这就是连接 URI 列表的原因。如果您需要一些人类可读的名称

  1. 您可以分别使用一些字符串函数。 URI 上的正则表达式(请参阅a similar question
    PREFIX : <http://www.semanticweb.org/administrator/ontologies/2017/2/Ontology-Schema_Movie#>                
    SELECT ?Movie (str(?y) as ?Rating) 
           (group_concat (?director_name;separator=",") as ?Director) {
      ?Movie :rating ?y;
             :directedBy ?z
      FILTER regex(str(?Movie),'Fantastic_Four')
      BIND(strafter(str(?z),str(:)) as ?director_name)
    }
    GROUP BY ?y ?Movie
  1. 我真的建议使用 rdfs:label(或类似名称)(如果存在)作为 URI 的人类可读名称

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-18
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多