Прописать первую букву набора результатов

У меня есть этот код SPARQL, который предназначен для работы на Wikidata:

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)

Вы можете проверить код здесь:

https://query.wikidata.org/

Предположим, что ?genreLabel по умолчанию всегда в нижнем регистре. Как мне прописать первую букву каждого возвращаемого значения? Благодарю.

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))

Обратите внимание, что в какой-то момент может быть проще выполнить модификацию и стиль String на стороне клиента...

Другие вопросы по тегам