假设我有一个uri http://dbpedia.org/page/Manmohan_Singh 现在,他的标签名为dbpprop:years。
当我写一个像
这样的查询时PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpedia: <http://dbpedia.org/resource/>PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>PREFIX category: <http://dbpedia.org/resource/Category:>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>PREFIX foaf: <http://xmlns.com/foaf/0.1/>PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX dbprop: <http://dbpedia.org/property/>PREFIX grs: <http://www.georss.org/georss/>
PREFIX category: <http://dbpedia.org/resource/Category:>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT DISTINCT ?x ?name ?abs ?birthDate ?birthplace ?year ?party ?office ?wiki WHERE {
?x owl:sameAs? dbpedia:Manmohan_Singh.
?x dbpprop:name ?name.
?x dbpedia-owl:birthDate ?birthDate.
?x dbpedia-owl:birthPlace ?birthplace.
?x dbpprop:years ?year.
?x dbpprop:party ?party.
?x dbpedia-owl:office ?office.
?x foaf:isPrimaryTopicOf ?wiki.
?x rdfs:comment ?abs.
FILTER(lang(?abs) = 'en')
}
我得到每年的结果在不同的行..因此重复其他列的数据。有没有一种方法可以将它作为一个列表中的列表,就像所有年份中的一个逗号分隔或像这样的smthng?
类似于prop dbpedia-owl:office
答案 0 :(得分:9)
这类似于Aggregating results from SPARQL query,但问题实际上有点复杂,因为有多个变量有多个结果。 ?name
,?office
和?birthPlace
有同样的问题。
您可以使用group_concat
解决此问题,但您也需要使用distinct
,以避免在连接中重复多次?year
重复串。 group by
减少了解决方案中的行数,但在每个行中,您未> 的值 em> group by。例如,由于?year
不在group by
中,因此?year
的值为 ,您必须对它们执行某些操作。你可以,例如,select (sample(?year) as ?aYear)
只从集合中抓取一个,或者你可以像我们在这里完成的那样,并select (group_concat(distinct ?year;separator=", ") as ?years)
将不同的值连接成一个字符串。
您需要一个类似以下的查询,它会生成一行:
SELECT ?x
(group_concat(distinct ?name;separator="; ") as ?names)
?abs
?birthDate
(group_concat(distinct ?birthplace;separator=", ") as ?birthPlaces)
(group_concat(distinct ?year;separator=", ") as ?years)
?party
(group_concat(distinct ?office;separator=", ") as ?offices)
?wiki
WHERE {
?x owl:sameAs? dbpedia:Manmohan_Singh.
?x dbpprop:name ?name.
?x dbpedia-owl:birthDate ?birthDate.
?x dbpedia-owl:birthPlace ?birthplace.
?x dbpprop:years ?year.
?x dbpprop:party ?party.
?x dbpedia-owl:office ?office.
?x foaf:isPrimaryTopicOf ?wiki.
?x rdfs:comment ?abs.
FILTER(langMatches(lang(?abs),"en"))
}
group by ?x ?abs ?birthDate ?party ?wiki
答案 1 :(得分:2)
查看GROUP_CONCAT
但是可以更容易地检索多行中的数据(您可以将重复放在彼此相邻的位置)并在代码中处理。