如何使用多种语言获取维基数据标签?

时间:2017-04-06 14:38:30

标签: sparql wikidata

我正在努力用意大利语和英语来获得意大利的地区。我可以通过这个查询进入一个语言......

PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>

SELECT DISTINCT ?RegionIT ?RegionITLabel ?ISO_code ?Geo
{
?RegionIT wdt:P31 wd:Q16110;
wdt:P300 ?ISO_code; 
wdt:P625 ?Geo 
           SERVICE wikibase:label { bd:serviceParam wikibase:language "it"  }
}

ORDER BY ?regionITLabel

...但是使用标准SPARQL语法添加另一种语言不起作用。

2 个答案:

答案 0 :(得分:7)

  

...但是使用标准SPARQL语法添加另一种语言并不起作用。

你是怎么做到的?这有效:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>

SELECT DISTINCT ?RegionIT ?label (lang(?label) as ?label_lang)  ?ISO_code ?Geo
{
    ?RegionIT wdt:P31 wd:Q16110;
              wdt:P300 ?ISO_code; 
              wdt:P625 ?Geo ;
              rdfs:label ?label
}
order by ?RegionIT

Link to try query

要限制lang上的意大利语和英语过滤器:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>

SELECT DISTINCT ?RegionIT ?label ?ISO_code ?Geo
{
    ?RegionIT wdt:P31 wd:Q16110;
              wdt:P300 ?ISO_code; 
              wdt:P625 ?Geo ;
              rdfs:label ?label
    filter(lang(?label) = 'it' || lang(?label) = 'en')
}
order by ?RegionIT

Link to try query

显然,将结果数乘以每种语言一个。如果这是一个问题,你可以这样做:

...
rdfs:label ?label_it , ?label_en
filter(lang(?label_it) = 'it' && lang(?label_en) = 'en')
...

这实际上是语言服务的作用。

答案 1 :(得分:4)

让我们列出所有英语和俄语国家。

#List of countries in English and Russian
SELECT ?country ?label_en ?label_ru
WHERE
{
    ?country wdt:P31 wd:Q6256.
    ?country rdfs:label ?label_en filter (lang(?label_en) = "en").
    ?country rdfs:label ?label_ru filter (lang(?label_ru) = "ru").
}

SPARQL query

此示例取自教程Research in programming Wikidata,部分&#34;国家&#34;。