2017-04-19 195 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
  • 的人類可讀名稱