如何使用 SPARQL 查询联合国中是否有名为“巴黎”的国家

How to ASK if there is any country in the United Nations called “Paris” using SPARQL

我一直在尝试执行此查询,但我不确定我需要的语法如何。我看过很多关于如何在查询中询问检查某物是否比其他东西更大或更短的示例,但我不知道如何询问某物是否在其他东西中。

这是我最后一次(失败)尝试:

PREFIX : <http:/dbpedia.org/resource/>
ASK
{
 FILTER(<http:/dbpedia.org/resource/Paris> IN <http:/dbpedia.org/resource/Member_states_of_the_United_Nations>)
}

使用 dc:hasPart 术语:

<http:/dbpedia.org/resource/Member_states_of_the_United_Nations> <http://dublincore.org/documents/dcmi-terms/#terms-hasPart> <http:/dbpedia.org/resource/Paris>

这在this w3 document中有描述。

部分问题是有一个名为

的 DBpedia 资源

http:/dbpedia.org/resource/Member_states_of_the_United_Nations

但您真正想要的是 dct:subject 属性 的值,是 类别,

http://dbpedia.org/page/Category:Member_states_of_the_United_Nations

例如,您可以通过以下查询获得成员国列表:

select ?country {
  ?country a dbo:Country ; 
           dct:subject dbc:Member_states_of_the_United_Nations 
}

SPARQL results

但是,巴黎不是一个成员国家。它是法国的一个城市,它是一个成员。您可以 检查 某物是否是成员 ask 查询,例如:

ask {
  dbr:France a dbo:Country ; 
             dct:subject dbc:Member_states_of_the_United_Nations 
}

SPARQL results (true)

您可以通过以下查询获得成员国家/地区的人口稠密地点列表:

select ?city ?country {
  ?city a dbo:PopulatedPlace ;
        dbo:country ?country .
  ?country a dbo:Country ; 
           dct:subject dbc:Member_states_of_the_United_Nations .
}

SPARQL results (limited to 100)

您可以将其修改为 ask 查询以检查具有特定名称的城市。例如:

ask {
  ?city rdfs:label "Paris"@en ;
        a dbo:PopulatedPlace ;
        dbo:country ?country .
  ?country a dbo:Country ; 
           dct:subject dbc:Member_states_of_the_United_Nations .
}

SPARQL results (true)