聚合 SPARQL 结果

Aggregating SPARQL Result

我自己写了一个 SPARQL 查询 ontology 它给出了重复的记录,为此我也使用了 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?

RDF 资源由 URI 标识,这就是将 URI 列表串联起来的原因。如果你需要一些人类可读的名字

  1. 您可以使用一些字符串函数。 URI 上的正则表达式(参见
    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 的人类可读名称