簡體   English   中英

確定DBpedia資源是城市還是國家

[英]Determining whether DBpedia resources are Cities or Countries

我使用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"))
}

SPARQL結果

通常,資源可以具有許多類型,因為事物對於謂詞rdf:type具有許多值。 在這種情況下,聽起來好像您想檢索相關的城市或國家類型(如果存在)。 如果查看資源http://dbpedia.org/resource/Somalia ,則可以看到它的類型為dbpedia-owl:Country 對於http://dbpedia.org/resource/Mogadishu ,沒有城市類型,但有定居點,這可能是最適合識別城市的方法。

您可以使用values來指定變量的一組允許值,並使用optional來獲取一些匹配項(如果存在)。 例如,

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
  }
}

SPARQL結果

另外請注意,我已經使用langMatches來檢查語言標簽; 這是正確的方法。 由於正則表達式除了檢查字符串中是否存在子字符串外沒有做其他事情,因此我將其更改為contains

對於它的價值,我不知道我以前是否在optional模式中使用過此values ,但我更喜歡它,並且我希望它將來會有用。 values 放在 optional values 之外不會有相同的效果,因為如果這樣做,則?locationType總是會得到一個值,只是optional部分可能不匹配。 也就是說,如果您將values取於optional之外,則會得到四個結果行:2個位置×2個locationTypes = 4個組合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM