Rdf 确定DBpedia资源是城市还是国家
我使用DBpedia提取具有给定IATA代码的机场信息。我使用的查询如下。我得到的结果包括一个机场两排;一个是城市,另一个是国家。如何检索位置类型(无论是城市还是国家)?这是我正在使用的查询: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.
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个组合