查询财产而不维基数据与SPARQL值(Querying property without value

2019-10-30 04:57发布

我有喜欢的城市,湖泊山川奥德作为字符串的1200个地理enties列表。 我愿与权威文件维基数据ID来丰富这些enties。 这工作,但作为结果,我得到有时不止一个WikiDataID建议。 我需要定义由国家中陈述外观是正确的。

作为一个例子,我尝试了城市卡尔斯鲁厄。 对于字符串“卡尔斯鲁厄”我得到三个结果。 但我想只是一个特定的维基数据ID(在这种情况下: https://www.wikidata.org/wiki/Q1040 )在德国,Englisch和法语标签和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". }
} 

Answer 1:

作为条件,主体应是国家的一部分。 这可以由酒店P17或作为值Q6256定义。 有没有办法只是为了查询一个属性,而不在查询助手的过滤器的价值?

如果我理解正确的话,你问如果您可以修改查询,如果该项目有一些国家(我们不关心哪一个)连接到它使得它只返回结果。 如果是这样的话,你可以在下面的图表模式添加到您的查询:

?item wdt:P17 ?country .

甚至:

?item wdt:P17 [] .

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



Answer 2:

此查询工作,我的目的:

    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


文章来源: Querying property without value with SPARQL in WikiData