Sparql 将多个结果折叠为一个
我有以下Wikidata SPARQL查询:Sparql 将多个结果折叠为一个,sparql,wikidata,Sparql,Wikidata,我有以下Wikidata SPARQL查询: SELECT ?game ?gameLabel ?enwiki ?genreLabel ?devLabel ?publisherLabel ?platformLabel ?dateYear WHERE { ?game wdt:P31 wd:Q7889; wdt:P136 wd:Q744038. OPTIONAL { ?enwiki schema:about ?game; schema:isPartOf
SELECT ?game ?gameLabel ?enwiki ?genreLabel ?devLabel ?publisherLabel ?platformLabel ?dateYear WHERE {
?game wdt:P31 wd:Q7889;
wdt:P136 wd:Q744038.
OPTIONAL {
?enwiki schema:about ?game;
schema:isPartOf <https://en.wikipedia.org/>
}
OPTIONAL {?game wdt:P136 ?genre}
OPTIONAL {?game wdt:P178 ?dev}
OPTIONAL {?game wdt:P123 ?publisher}
OPTIONAL {?game wdt:P400 ?platform}
OPTIONAL {
?game wdt:P577 ?date;
BIND( year(?date) as ?dateYear )
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
} ORDER BY ASC (?dateYear) asc(?gameLabel)
但是,propset字段始终为空
[编辑]
我成功地实现了分组功能:
SELECT
?game
(group_concat(distinct ?genreLabel ; separator = ",") AS ?genreLabels)
WHERE {
?game wdt:P31 wd:Q7889;
wdt:P136 wd:Q744038.
OPTIONAL {
?game wdt:P136 ?genre.
?genre rdfs:label ?genreLabel.
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
} group by $game
ORDER BY ASC (?dateYear) ASC (?gameLabel)
但是,我希望脚本只返回英文结果,但是服务
行不再起作用
[编辑]
我在其他地方得到了一些帮助,下面是工作脚本:
SELECT
?game
(group_concat(distinct ?enwiki ; separator = ", ") AS ?enwikis)
(group_concat(distinct ?gameLabel ; separator = ", ") AS ?gameLabels)
(group_concat(distinct ?genreLabel ; separator = ", ") AS ?genreLabels)
(group_concat(distinct ?developerLabel ; separator = ", ") AS ?developerLabels)
(group_concat(distinct ?publisherLabel ; separator = ", ") AS ?publisherLabels)
(group_concat(distinct ?platformLabel ; separator = ", ") AS ?platformLabels)
(group_concat(distinct ?dateYear ; separator = ", ") AS ?dateYears)
WHERE {
?game wdt:P31 wd:Q7889;
wdt:P136 wd:Q744038.
OPTIONAL {
?enwiki schema:about ?game;
schema:isPartOf <https://en.wikipedia.org/>
}
OPTIONAL {?game wdt:P136 ?genre}
OPTIONAL {?game wdt:P178 ?developer}
OPTIONAL {?game wdt:P123 ?publisher}
OPTIONAL {?game wdt:P400 ?platform}
OPTIONAL {
?game wdt:P577 ?date;
BIND( year(?date) as ?dateYear )
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en".
?game rdfs:label ?gameLabel.
?genre rdfs:label ?genreLabel.
?developer rdfs:label ?developerLabel.
?publisher rdfs:label ?publisherLabel.
?platform rdfs:label ?platformLabel.
}
} GROUP BY $game
ORDER BY ASC (?dateYear) ASC (?gameLabel)
选择
游戏
(组_concat(不同的enwiki;分隔符=“,”)作为enwiki)
(组_concat(不同的游戏标签;分隔符=“,”)作为游戏标签)
(组_concat(不同的genreLabel;分隔符=“,”)作为genreLabel)
(组_concat(不同的developerLabel;分隔符=“,”)作为developerLabel)
(组_concat(不同的?publisherLabel;分隔符=“,”)作为?publisherLabel)
(组_concat(不同的平台标签;分隔符=“,”)作为平台标签)
(组_concat(不同的日期年;分隔符=“,”)作为日期年)
在哪里{
?游戏wdt:P31 wd:Q7889;
wdt:P136 wd:Q744038。
可选的{
?enwiki模式:关于?游戏;
模式:isPartOf
}
可选{游戏wdt:P136?流派}
可选{?游戏wdt:P178?开发者}
可选{游戏wdt:P123?发行商}
可选{游戏wdt:P400?平台}
可选的{
?游戏wdt:P577?日期;
绑定(年(?日期)为?日期年)
}
服务维基库:标签{
bd:serviceParam wikibase:language“en”。
?游戏rdfs:标签?游戏标签。
?类型RDF:标签?genreLabel。
?开发者rdfs:标签?开发者标签。
?发布者rdfs:标签?发布者标签。
?平台rdfs:标签?平台标签。
}
}按$game分组
按ASC(?日期年)ASC(?游戏标签)订购
我仍然想知道如何处理一些东西,但会开始一个新问题。您的解决方案是正确的,但它不适用于Wikidata label服务器,因为这是一些特殊的非标准SPARQL功能。如果您尝试对平台等进行相同的查询,它会起作用。是的,如果我将
?gameLabel
更改为?game
,它会起作用。我不知道为什么它不喜欢标签(它们是由软件自动创建的)。是的,这是一种非标准的SPARQL方式,因此,它可能不会在查询中执行,而是在查询之后通过相应的标签(如果存在)简单地扩展变量值。我能够使用rdfs:label
,让标签工作,但是脚本会返回每种语言的结果。我只想要英语成绩。服务
行应该限制结果,但它没有发生。不,正如我所说,服务
是Blazegraph triple store的一些特殊功能。您现在所做的是标准的SPARQL方式,例如,您必须通过filter(LANGMATCHES(LANG(?genreLabel),“en”)
SELECT
?game
(group_concat(distinct ?enwiki ; separator = ", ") AS ?enwikis)
(group_concat(distinct ?gameLabel ; separator = ", ") AS ?gameLabels)
(group_concat(distinct ?genreLabel ; separator = ", ") AS ?genreLabels)
(group_concat(distinct ?developerLabel ; separator = ", ") AS ?developerLabels)
(group_concat(distinct ?publisherLabel ; separator = ", ") AS ?publisherLabels)
(group_concat(distinct ?platformLabel ; separator = ", ") AS ?platformLabels)
(group_concat(distinct ?dateYear ; separator = ", ") AS ?dateYears)
WHERE {
?game wdt:P31 wd:Q7889;
wdt:P136 wd:Q744038.
OPTIONAL {
?enwiki schema:about ?game;
schema:isPartOf <https://en.wikipedia.org/>
}
OPTIONAL {?game wdt:P136 ?genre}
OPTIONAL {?game wdt:P178 ?developer}
OPTIONAL {?game wdt:P123 ?publisher}
OPTIONAL {?game wdt:P400 ?platform}
OPTIONAL {
?game wdt:P577 ?date;
BIND( year(?date) as ?dateYear )
}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en".
?game rdfs:label ?gameLabel.
?genre rdfs:label ?genreLabel.
?developer rdfs:label ?developerLabel.
?publisher rdfs:label ?publisherLabel.
?platform rdfs:label ?platformLabel.
}
} GROUP BY $game
ORDER BY ASC (?dateYear) ASC (?gameLabel)