我有这个适用于维基数据的SPARQL代码:
SELECT
?game
(group_concat(distinct ?gameLabel ; separator = ", ") AS ?gameLabels)
(group_concat(distinct ?genreLabel ; separator = ", ") AS ?genreLabels)
WHERE {
?game wdt:P31 wd:Q7889;
wdt:P136 wd:Q744038.
OPTIONAL {?game wdt:P136 ?genre}
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en".
?game rdfs:label ?gameLabel.
?genre rdfs:label ?genreLabel.
}
}
GROUP BY $game
ORDER BY ASC (?gameLabels)
您可以在此处测试代码:
假设默认情况下?genreLabel
始终为小写。如何将每个返回值的首字母大写?感谢。
答案 0 :(得分:1)
因为你不能在BIND部分使用它们 - 或者至少我不知道怎么做:
这就是维基数据魔术标签服务变得复杂的地方。SELECT
?game
(group_concat(distinct ?gameLabel ; separator = ", ") AS ?gameLabels)
(group_concat(distinct ?genreL ; separator = ", ") AS ?genreLabels)
WHERE {
?game wdt:P31 wd:Q7889 ;
wdt:P136 wd:Q744038 .
OPTIONAL {
?game wdt:P136 ?genre.
?genre rdfs:label ?gL.
FILTER(LANGMATCHES(LANG(?gL), "en"))
}
BIND(CONCAT(UCASE(SUBSTR(?gL, 1, 1)), SUBSTR(?gL, 2)) as ?genreL)
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en".
?game rdfs:label ?gameLabel.
}
}
GROUP BY ?game
ORDER BY ASC (?gameLabels)
这个想法如下:
SUBSTR(?gL, 1, 1)
UCASE(SUBSTR(?gL, 1, 1))
SUBSTR(?gL, 2))
CONCAT(UCASE(SUBSTR(?gL, 1, 1)), SUBSTR(?gL, 2))
注意,在某些时候,在客户端进行字符串修改和样式化可能更容易......