Пустые метки путем запроса через SPARQL в WikiData - PullRequest
0 голосов
/ 23 февраля 2019

Обновление: этот вопрос связан с другим вопросом через 1 , потому что он примерно совпадает с выходными данными.

У меня есть список из 1200 географических объектов, таких как города, озера илигоры как струны.Я хотел бы обогатить эти данные авторитетным файлом WikiData ID.Это работает, но в результате я иногда получаю более одного предложения WikiDataID.Мне нужно определить правильную по появлению любой страны (неважно, какая именно) в Заявлениях как ограничение.

В качестве примера я попробовал город Карлсруэ.Для строки «Карлсруэ» я получаю пять результатов.В этом случае я выбираю идентификатор Q1040 (https://www.wikidata.org/wiki/Q1040).. Теперь у меня проблема в том, что я не знаю, как запросить altLabel (также известный как) и метку на английском, немецком и французском языках. С текущимкод Я получаю пустые записи для altLabel и Labels, хотя есть altLabels и Labels (см. WikiData). Я думаю, что я только что использовал неправильный порядок строк кода. Может кто-нибудь помочь мне с правильным порядком?

Большое спасибо за вашу помощь!

Вот запрос:

SELECT DISTINCT ?item ?itemLabel ?altLabel ?label_en ?label_de ? 
label_fr WHERE { 
?item rdfs:label "Karlsruhe"@de.
?item wdt:P17 [] .

optional {
?item skos:altLabel ?altLabel.
?item rdfs:label ?label_de FILTER((LANG(?label_de)) = "de") .
?item rdfs:label ?label_en FILTER((LANG(?label_en)) = "en") .
?item rdfs:label ?label_fr FILTER((LANG(?label_fr)) = "fr") .
FILTER(LANGMATCHES(LANG(?altLabel), ?item))
}
SERVICE wikibase:label { bd:serviceParam wikibase:language " 
[AUTO_LANGUAGE],de, en, fr". }
} 

Попробуйте

1 Ответ

0 голосов
/ 26 февраля 2019

Этот запрос работал для моего проекта:

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX schema: <http://schema.org/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>

SELECT DISTINCT  * 

WHERE {
  ?item rdfs:label "Karlsruhe"@de.   

  ?item rdfs:label ?label_de.
  FILTER((LANG(?label_de)) = "de").

  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE], de, en, fr". }

    bind(if(exists{?item wdt:P17 []}, "yes", "no") as ?country_)

  optional {

      ?item rdfs:label ?label_en.     
      FILTER((LANG(?label_en)) = "en").      
      ?item rdfs:label ?label_fr.  
      FILTER((LANG(?label_fr)) = "fr").

    ?item skos:altLabel ?altLabel_de.
    FILTER(LANGMATCHES(LANG(?altLabel_de), "de"))
    optional {
    ?item skos:altLabel ?altLabel_en.
    FILTER(LANGMATCHES(LANG(?altLabel_en), "en"))
      }
    optional {
    ?item skos:altLabel ?altLabel_fr.
    FILTER(LANGMATCHES(LANG(?altLabel_fr), "fr"))
      }
  }  
} 
order by ?item
...