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

Ivo*_*kov 6 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
Run Code Online (Sandbox Code Playgroud)

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

use*_*512 8

...但是使用标准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
Run Code Online (Sandbox Code Playgroud)

链接尝试查询

限制在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
Run Code Online (Sandbox Code Playgroud)

链接尝试查询

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

...
rdfs:label ?label_it , ?label_en
filter(lang(?label_it) = 'it' && lang(?label_en) = 'en')
...
Run Code Online (Sandbox Code Playgroud)

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

  • 您可以使用`SERVICE wikibase:label`来请求多种语言:`SERVICE wikibase:label {bd:serviceParam wikibase:language"it,en"}`,但它只是一个回退机制,您只能获得第一个定义的标签来自所请求的语言,而不是每种语言一个标签. (3认同)

And*_*sky 6

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

#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").
}
Run Code Online (Sandbox Code Playgroud)

SPARQL查询

此示例摘自Wikidata编程研究教程“国家”部分。