在 WikiData 中使用 SPARQL 查询没有值的 属性

Querying property without value with SPARQL in WikiData

我有一个包含 1200 个地理实体的列表,例如城市、湖泊或山脉等字符串。我想用权威文件 WikiData ID 丰富这些实体。这行得通,但结果我有时会收到不止一个 WikiDataID 建议。我需要在声明中根据一个国家的外观来定义正确的。

作为示例,我尝试了卡尔斯鲁厄市。 对于字符串 "Karlsruhe" 我得到三个结果。但我只想要一个特定的 WikiData ID(在本例中为:https://www.wikidata.org/wiki/Q1040),带有标签和德语、英语和法语的 altLabel(也称为)。 作为一个条件,实体应该是一个国家的一部分。 您可以通过 属性 P17 或 Q6256 的值来定义。

有没有办法只查询 属性 而没有查询助手过滤器中的值?

非常感谢您的帮助!

这里是查询:

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 ?country ?item ?itemLabel ?altLabel ?label_en ? 
label_de ?label_fr 
WHERE {
 ?item rdfs:label "Karlsruhe"@de.
 ?item skos:altLabel ?altLabel.
?item rdfs:label ?label_en.
 ?item rdfs:label ?label_de.
 ?item rdfs:label ?label_fr.
FILTER(LANGMATCHES(LANG(?altLabel), "de"))
 FILTER((LANG(?label_en)) = "en")
FILTER((LANG(?label_de)) = "de")
FILTER((LANG(?label_fr)) = "fr")
SERVICE wikibase:label { bd:serviceParam wikibase:language " 
[AUTO_LANGUAGE],de, en, fr". }
} 

As an condition the entity should be part of an country. This you can define by the property P17 or as an value Q6256. Is there a way just to query a property without the value in Filter of the Query Helper?

如果我没理解错的话,你问的是你是否可以修改查询,如果项目有 一些 个国家(我们不不在乎哪个)附加到它。如果是这种情况,您只需将以下图形模式添加到您的查询中:

?item wdt:P17 ?country .

甚至:

?item wdt:P17 [] .

[] 是一个空白节点,在 SPARQL 中表示一个匿名变量,即我们不感兴趣的值的变量占位符)。

此查询符合我的目的:

    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