Search code examples
localizationsparqlaggregationwikidata

Wikidata SPARQL: how to include labels for grouped-by attributes


I have a query that works OK:

SELECT ?language (COUNT (?lexeme) as ?lexemeCount) {
  ?lexeme dct:language ?language .
}
GROUP BY ?language

However, I can't think of how to add labels for languages (instead, or alongside with) language entity URIs. This fails with a time out exception on Wikidata:

SELECT ?languageLabel (COUNT (?lexeme) as ?lexemeCount) {
  ?lexeme dct:language ?language .
  SERVICE wikibase:label { 
    bd:serviceParam wikibase:language "en".
  }
}
GROUP BY ?languageLabel

So does this:

SELECT ?languageLabel (COUNT (?lexeme) as ?lexemeCount) {
  ?lexeme dct:language ?language .
  ?language rdfs:label ?languageLabel .
  FILTER(lang(?languageLabel) = 'en') .
}
GROUP BY ?languageLabel

What query's result would include language names, rather than URIs?


Solution

  • Turning a comment into a community wiki answer:

    SELECT ?languageLabel ?lexemeCount {   
      {   
        SELECT ?language (COUNT (?lexeme) AS ?lexemeCount) {
          ?lexeme dct:language ?language
        }
        GROUP BY ?language
      }
      SERVICE wikibase:label {
        bd:serviceParam wikibase:language "en"
      }
    }