2017-04-19 95 views
0

我写我自己的本体一个SPARQL查询这给重复的记录,为了这个,我也用GROUP_CONCAT,我的查询是汇总SPARQL结果

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 

该查询给了我想要的结果,但输出主任进来方式如下:

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在我的结果?

+0

1.顺便说一下,'group_concat(distinct?z; ...)'是相当合法的构造。 2.尽管AKSW回答中的变体2当然更可取,但您可能对'afn:localname' [备选定义]感兴趣(https://jena.apache.org/documentation/query/library-function.html#addtional -functions-provided-by-arq)(或在'afn:localname'本身)。 –

回答

1

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

  1. 你可以使用一些字符串函数,对URI REGEX(见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 
  • 我真的建议使用rdfs:label(类似于或东西)如果存在一个URI
  • 的人类可读名称