Rdf 确定DBpedia资源是城市还是国家

Rdf 确定DBpedia资源是城市还是国家,rdf,sparql,semantic-web,dbpedia,Rdf,Sparql,Semantic Web,Dbpedia,我使用DBpedia提取具有给定IATA代码的机场信息。我使用的查询如下。我得到的结果包括一个机场两排;一个是城市,另一个是国家。如何检索位置类型(无论是城市还是国家)?这是我正在使用的查询: PREFIX dbpprop: <http://dbpedia.org/property/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX dbpedia-owl: <http://dbpedia.

我使用DBpedia提取具有给定IATA代码的机场信息。我使用的查询如下。我得到的结果包括一个机场两排;一个是城市,另一个是国家。如何检索位置类型(无论是城市还是国家)?这是我正在使用的查询:

PREFIX dbpprop: <http://dbpedia.org/property/> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> 
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT * WHERE { 
  ?subject rdf:type dbpedia-owl:Airport;
           rdfs:label ?label;
           dbpedia-owl:location ?location;
           dbpedia-owl:iataLocationIdentifier ?iata;
           geo:lat ?latitude;
           geo:long ?longitude.
  FILTER (lang(?label) = 'en' and regex(?iata, "MGQ"))
}
前缀dbpprop:
前缀rdfs:
前缀dbpedia owl:
前缀geo:
前缀rdf:
选择*其中{
?受试者rdf:dbpedia类型owl:机场;
rdfs:标签?标签;
dbpediaowl:位置?位置;
dbpedia猫头鹰:国际航空运输协会(iata);
geo:纬度;
地理:长?经度。
过滤器(lang(?label)=“en”和regex(?iata,“MGQ”))
}

一般来说,资源可以有很多类型,因为谓词rdf:type的值很多。在本例中,听起来您希望检索关联的城市或国家类型(如果存在)。如果查看资源,您可以看到它的类型为
dbpedia owl:Country
。例如,没有城市类型,但有定居点,这可能是识别城市最合适的方法

您可以使用
为变量指定一组允许的值,并使用
可选
获取一些匹配项(如果存在)。例如:

select * where {
  ?subject rdf:type dbpedia-owl:Airport;
           rdfs:label ?label;
           dbpedia-owl:location ?location;
           dbpedia-owl:iataLocationIdentifier ?iata;
           geo:lat ?latitude;
           geo:long ?longitude.
  FILTER (langMatches(lang(?label),'en') && contains(?iata, "MGQ"))

  optional {
    values ?locationType { dbpedia-owl:Settlement dbpedia-owl:Country } 
    ?location a ?locationType
  }
}

还要注意,我使用了
langMatches
来检查语言标记;这是正确的方法。由于正则表达式除了检查字符串中是否出现子字符串外,没有做任何事情,因此我将其更改为
contains

至于它的价值,我不知道我以前是否在
可选
模式中使用过这个
,但我非常喜欢它,我希望它在将来可能会有用。将
放在
可选
之外的效果并不相同,因为如果这样做,那么
?locationType
总是会得到一个值,只是
可选
部分可能不匹配。也就是说,如果将
置于
可选
之外,将得到四个结果行:2个位置×2个位置类型=4个组合