通过在WikiData中使用SPARQL查询来清空标签

时间:2019-02-23 12:58:25

标签: sparql wikidata

更新:此问题通过1链接到另一个问题,因为它与大约相同的输出数据。

我列出了1200个地理实体,例如城市,湖泊或山脉。我想用授权文件WikiData ID丰富这些实体。这可行,但是结果有时我会收到多个WikiDataID建议。我需要通过声明中任何国家(无论哪个国家)的出现来定义一个正确的约束。

例如,我尝试了卡尔斯鲁厄市。对于字符串“ Karlsruhe”,我得到五个结果。在这种情况下,我选择ID Q1040(https://www.wikidata.org/wiki/Q1040)。 现在,我遇到了一个问题,我不知道如何用英语,德语和法语查询altLabel(也称为as)和Label。 使用当前代码,尽管有altLabel和Labels,但我得到了altLabel和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". }
} 

Try it

1 个答案:

答案 0 :(得分:0)

此查询适用于我的项目:

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