大写结果集的第一个字母
Capitalize the first letter of a result set
我有这个用于维基数据的 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
默认总是小写。如何将每个返回值的首字母大写?谢谢
这就是 Wikidata 的神奇标签 SERVICE 使事情变得复杂的关键所在,因为您不能在 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))
请注意,在某些时候,在客户端进行字符串修改和样式设置可能会更容易...
我有这个用于维基数据的 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
默认总是小写。如何将每个返回值的首字母大写?谢谢
这就是 Wikidata 的神奇标签 SERVICE 使事情变得复杂的关键所在,因为您不能在 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))
请注意,在某些时候,在客户端进行字符串修改和样式设置可能会更容易...