2013-01-18 76 views
1

我試圖從DBpedia查詢城市,州和國家的摘要,並且混合結果。它似乎與城市和國家,但與國家沒有關係。查詢城市/州/國家/地區英文摘要

SELECT * WHERE { 
    ?x rdfs:label "France"@en. 
    ?x dbpedia-owl:abstract ?abstract. 
    FILTER (LANG(?abstract) = 'en') 
} 

或者

SELECT * WHERE { 
    ?x rdfs:label "Boston"@en. 
    ?x dbpedia-owl:abstract ?abstract. 
    FILTER (LANG(?abstract) = 'en') 
} 

然而,這些查詢沒有找到任何結果:

SELECT * WHERE { 
    ?x rdfs:label "Sao Paulo"@en. 
    ?x dbpedia-owl:abstract ?abstract. 
    FILTER (LANG(?abstract) = 'en') 
} 

SELECT * WHERE { 
    ?x rdfs:label "Massachusetts"@en. 
    ?x dbpedia-owl:abstract ?abstract. 
    FILTER (LANG(?abstract) = 'en') 
} 

首先,我怎麼可以過濾搜索,只城市,州或國家?其次,我如何能在法國找到像馬薩諸塞州或羅納那樣的州?

回答

2

SPARQL查詢(不包括OPTIONAL)僅返回所有三元模式可以匹配的結果。 ?爲了您的查詢不返回結果,這意味着關於資源下列語句中的一個或多個X不可用:

  • 有一個rdfs:label「聖保羅」
  • 標籤「聖保羅」是語言標記英語
  • 有一個rdfs:abstract
  • 抽象爲語言標記的英語

在這個例子中,你可能想找到<http://dbpedia.org/resource/Sao_Paulo> 。此資源的標籤不是「聖保羅」,而是「聖保羅」。

第二個查詢適用於我(馬薩諸塞州),但需要一些時間才能完成。

要將結果限制爲特定類型的資源(如城市,州或國家),您需要指定類型。在RDF中,使用rdf:type指定資源類型(或者說「類」)。您可以查詢,在以同樣的方式:

SELECT * WHERE { 
    ?x rdfs:label "São Paulo"@en. 
    ?x rdf:type dbpedia-owl:Settlement. 
    ?x dbpedia-owl:abstract ?abstract. 
    FILTER (LANGMATCHES(LANG(?abstract), 'en')) 
} 

相反的rdf:type可以使用速記a,你可以讀作「?X Y'」。
而且,LANGMATCHES(LANG(?abstract), 'en')可能比LANG(?abstract) = 'en')更有效。

請注意,此資源dbpedia:São_Paulo不是DBpedia中的dbpedia-owl:City,因爲它是維基百科上的一個自治市:http://en.wikipedia.org/wiki/S%C3%A3o_Paulo。同樣,dbpedia:Massachusetts未被定義爲一個狀態。不過,兩者都是dbpedia-owl:PopulatedPlace