2017-04-06 81 views
1

我在意大利和英國尋找意大利的地區。我能得到那麼在一個laguage與此查詢...如何使用多種語言獲取維基數據標籤?

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語法不起作用另一種語言。

+0

使用標籤服務的多個標籤:https://stackoverflow.com/questions/49118702/sparql-querying-wikidata-labels-for-more-than-one-language –

回答

1

...但使用標準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

要限制對郎剛剛意大利語和英語過濾器:

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

這是有效的語言服務。

+0

謝謝。這確實回答了這個問題。我的意圖是學習如何使用'SERVICE wikibase:label'來實現它,但是這個問題並不清楚。然而,我會很感激這方面的任何想法。 –

+0

您可以通過'SERVICE wikibase:label'請求幾種語言,如下所示:'SERVICE wikibase:label {bd:serviceParam wikibase:language「it,en」}',但它只是一個回退機制,您只會獲得第一個定義來自所請求語言的標籤,而不是每種語言的一個標籤。 – maxlath

1

讓我們用英語和俄語列出所有國家。

#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,部分 「國家」 截取。