3

すべての空港とその IATA コードのリストを照会しようとしています。

PREFIX p: <http://dbpedia.org/property/>
PREFIX o: <http://dbpedia.org/ontology/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT DISTINCT ?airport ?iata ?name 
WHERE {
    ?airport rdf:type o:Airport ;
     p:iata ?iata ;
     p:name ?name 
}
ORDER by ?airport

実行するとほとんど問題ないように見えますが、空港に間違った名前が割り当てられる奇妙なブロックがいくつかあります。

http://dbpedia.org/resource/Prince_Abdul_Majeed_bin_Abdul_Aziz_Domestic_Airport  "ULH"@en   "Prince Abdul Majeed bin Abdul Aziz Airport"@en
http://dbpedia.org/resource/Prince_Albert_(Glass_Field)_Airport                  "YPA"@en   "Prince Abdul Majeed bin Abdul Aziz Airport"@en
http://dbpedia.org/resource/Prince_George_Airport                                "YXS"@en   "Prince Abdul Majeed bin Abdul Aziz Airport"@en
http://dbpedia.org/resource/Prince_Mohammad_Bin_Abdulaziz_Airport                "MED"@en   "Prince Abdul Majeed bin Abdul Aziz Airport"@en
http://dbpedia.org/resource/Prince_Rupert/Seal_Cove_Water_Airport                "ZSW"@en   "Prince Abdul Majeed bin Abdul Aziz Airport"@en
http://dbpedia.org/resource/Prince_Rupert_Airport                                "YPR"@en   "Prince Abdul Majeed bin Abdul Aziz Airport"@en
http://dbpedia.org/resource/Prince_Said_Ibrahim_International_Airport            "HAH"@en   "Prince Abdul Majeed bin Abdul Aziz Airport"@en
http://dbpedia.org/resource/Princess_Juliana_International_Airport               "SXM"@en   "Prince Abdul Majeed bin Abdul Aziz Airport"@en

名前に「プリンス」が付いている以外に、共通点はないようです。リソースをクリックしても、割り当てられた名前とは関係がないことが示唆されます。

私は何を間違っていますか?

編集 - 解決策が見つかりました:

「ORDER by ?airport」を削除するか、「ORDER by ?iata」に変更すると問題が解決します。

4

1 に答える 1

0

DBpedia オントロジー ( dbpedia-owl) データは、古いインフォボックス データ ( ) よりも少しきれいになる傾向があるため、プロパティdbpropを使用するクエリを使用することをお勧めします。dbpedia-owl

SELECT ?airport ?iata ?name
WHERE {
    ?airport a dbpedia-owl:Airport ;
             dbpedia-owl:iataLocationIdentifier ?iata ;
             rdfs:label ?name .
    FILTER langMatches( lang( ?name ), "EN" )
}
order by ?airport

SPARQL の結果

データはいくらか良くなっていますが、次のような奇妙な結果がまだいくつかあります。

http://dbpedia.org/resource/Prince_Albert_(Glass_Field)_Airport "YPA"@en    "Prince Albert (Glass Field) Airport"@en
http://dbpedia.org/resource/Prince_George_Airport   "YXS"@en    "Prince Albert (Glass Field) Airport"@en
http://dbpedia.org/resource/Prince_Mohammad_Bin_Abdulaziz_Airport   "MED"@en    "Prince Albert (Glass Field) Airport"@en
http://dbpedia.org/resource/Prince_Rupert/Seal_Cove_Water_Airport   "ZSW"@en    "Prince Albert (Glass Field) Airport"@en
http://dbpedia.org/resource/Prince_Rupert_Airport   "YPR"@en    "Prince Albert (Glass Field) Airport"@en
http://dbpedia.org/resource/Prince_Said_Ibrahim_International_Airport   "HAH"@en    "Prince Albert (Glass Field) Airport"@en
http://dbpedia.org/resource/Princess_Juliana_International_Airport  "SXM"@en    "Prince Albert (Glass Field) Airport"@en
http://dbpedia.org/resource/Princeton_Airport_(New_Jersey)  "PCT"@en    "Prince Albert (Glass Field) Airport"@en

いくつかの異なるアプローチを試すために、?airportandでグループ化し?iata、名前をサンプリングすることも決定しました。

SELECT ?airport ?iata sample(?name)
WHERE {
    ?airport a dbpedia-owl:Airport ;
             dbpedia-owl:iataLocationIdentifier ?iata ;
             rdfs:label ?name .
    FILTER langMatches( lang( ?name ), "EN" )
}
group by ?airport ?iata
order by ?airport

SPARQL の結果

これは異なりますが、同様に奇妙な結果になります。

http://dbpedia.org/resource/%22Solidarity%22_Szczecin-Goleni%C3%B3w_Airport "SZZ"@en    ""Solidarity" Szczecin-Goleniów Airport"@en
http://dbpedia.org/resource/%C3%81ngel_Albino_Corzo_International_Airport   "TGZ"@en    ""Solidarity" Szczecin-Goleniów Airport"@en
http://dbpedia.org/resource/%C3%84ngelholm-Helsingborg_Airport  "AGH"@en    ""Solidarity" Szczecin-Goleniów Airport"@en
http://dbpedia.org/resource/%C3%85lesund_Airport,_Vigra "AES"@en    ""Solidarity" Szczecin-Goleniów Airport"@en
http://dbpedia.org/resource/%C3%85re_%C3%96stersund_Airport "OSD"@en    ""Solidarity" Szczecin-Goleniów Airport"@en

それでも、代わりに名前でグループ化し、名前を選択して特定の名前の空港の数を数えると、大まかに理解できます1が、一部の名前は 2 回表示されます!

SELECT count(?airport) ?name
WHERE {
    ?airport a dbpedia-owl:Airport ;
             dbpedia-owl:iataLocationIdentifier ?iata ;
             rdfs:label ?name .
    FILTER langMatches( lang( ?name ), "EN" )
}
group by ?name
order by ?name

SPARQL の結果

1   "Abraham González International Airport"@en
1   "Abraham González International Airport"@en
...
1   "Prince Albert (Glass Field) Airport"@en
1   "Prince Albert (Glass Field) Airport"@en
1   "Prince Albert (Glass Field) Airport"@en
1   "Prince Albert (Glass Field) Airport"@en
1   "Prince Albert (Glass Field) Airport"@en
1   "Prince Albert (Glass Field) Airport"@en
1   "Prince Albert (Glass Field) Airport"@en
1   "Prince Albert (Glass Field) Airport"@en

これは本当に奇妙です。クエリに問題があるようには見えませんが、DBpedia で奇妙なことが起こっているようです。これらの奇妙なエントリのいくつかを見ることができますが、DBpedia が表示するデータはこれらの結果と一致しません。たとえば、元のクエリの結果の 1 つは次のとおりです。

http://dbpedia.org/resource/Prince_Mohammad_Bin_Abdulaziz_Airport   "MED"@en    "Prince Albert (Glass Field) Airport"@en

しかし、http://dbpedia.org/page/Prince_Mohammad_Bin_Abdulaziz_Airportにアクセスして「Albert」を検索しても見つかりません。

于 2013-07-20T02:27:39.633 に答える