如何在SPARQL中的group_concat中保留语言标记

时间:2014-08-25 22:36:42

标签: sparql semantic-web dbpedia

我试图用尽可能多的语言找到每个uri的标签。作为一个例子,我运行这个

select ?film group_concat (?filmLabel;separator="|") where{
  ?film a dbpedia-owl:Film;rdfs:label ?filmLabel  . FILTER (regex(?film,'Titanic'))
} 

结果如下所示 Titanic

我得到了不同语言的标签,但是group_concat剥离了语言标签,所以我不知道什么标签属于哪种语言。我可以为每种语言使用OPTIONAL,但它会非常混乱。我该怎么做才能将结果汇总成这种格式“Titanic_(1953_film)”@ en |“Der Untergang der Titanic”@de |“Titanic(películade1953)”@ es所以当我发布处理它们时我可以获得他们相应的语言。

1 个答案:

答案 0 :(得分:3)

您可以将group_concat表达为每行构建的表达式,而不仅仅是group_concat的电影标签。特别是,如果concat('"',?filmLabel,'"@',lang(?filmLabel)上的group_concat,您将得到您想要的结果:

select ?film
       (group_concat( concat('"',?filmLabel,'"@',lang(?filmLabel)); separator="|" ) as ?label)
where {
  ?film a dbpedia-owl:Film ;
        rdfs:label ?filmLabel .
  FILTER (regex(?film,'Titanic'))
} 

SPARQL results

film:  http://dbpedia.org/resource/Titanic_(1953_film)
label: "泰坦尼克号 (1953年电影)"@zh|"Titanic (1953 film)"@en|"Der Untergang der Titanic"@de|"Titanic (película de 1953)"@es|"Titanic (film, 1953)"@fr|"Titanic (film 1953)"@it|"タイタニックの最期"@ja|"Titanic (1953)"@nl|"Titanic (film 1953)"@pl|"Titanic (1953)"@pt|"Титаник (фильм, 1953)"@ru

film:  http://dbpedia.org/resource/Titanic:_Blood_and_Steel
label: "Titanic – Blood and Steel"@de|"Titanic: Blood and Steel"@en|"Titanic: sangre y acero"@es|"Titanic : de sang et d'acier (série télévisée, 2012)"@fr|"Titanic - Nascita di una leggenda"@it|"Титаник: Кровь и сталь"@ru