2017-10-10 99 views
0

我試圖用CONSTRUCT得到國家的名單和他們的首都並解析結果,早在龜格式查詢DBpedia中與SPARQL:如何去掉括號在DBpedia中查詢結果SPARQL?

CONSTRUCT { 
    ?country dbo:capital ?city. 
    ?country a dbo:Country. 
} WHERE { 
    ?country dbo:capital ?city. 
    ?country a dbo:Country 
} 

然而,當有括號()_在國家名稱中,結果不正確地使用前綴。

例子:

dbr:Virginia dbo:capital <http://dbpedia.org/resource/Richmond,_Virginia> 

是否有解決這個問題的任何自動化的方式?我真的不期待手動修復此...

+0

什麼你通過固定意思?你如何處理括號,以及如何處理',_'?其他情況下沒有前綴表單的情況怎麼樣?你知道爲什麼這些URI不能以前綴形式序列化嗎? – AKSW

+0

此外,爲什麼你想要一切前綴? CONSTRUCT查詢只是以指定的RDF序列化格式返回一組RDF三元組。爲什麼你不能簡單地在客戶端代碼中工作? – AKSW

+0

我不明白爲什麼,但這會非常複雜。你必須(1)走資源'r'並修改其URI'STR(R)'一些功能'F'導致字符串'S = F(STR(R))'和(2)此字符串必須使用'uri(s)'將其轉換爲URI。函數f的定義取決於你。 – AKSW

回答

0

說實話,我不明白你爲什麼要做到這一點,它仍然是開放的,你希望如何處理不屬於的情況下(可以」 t be)以Turtle語法爲前綴。但是,給你一個大概的瞭解:

CONSTRUCT { 
    ?country dbo:capital ?city. 
    ?country a dbo:Country. 
} WHERE { 
    ?country dbo:capital ?city_tmp. 
    ?country a dbo:Country 
    ## here you would handle the "fix", e.g. use a regex and find some replacement 
    BIND(uri(REPLACE(str(?city_tmp), ",_", "_", "i")) AS ?city) 
} 

您可以在我使用的只是一個虛擬的正則表達式匹配,_和替換字符串_查詢看到。 例如,http://dbpedia.org/resource/Nancy,_France將被取代,以dbr:Nancy_France