2011-04-17 107 views
3

我試圖讓在耶拿http://dbpedia.org/page/Black_Sabbath如何通過使用jena提供屬性名稱來獲取dbpedia中屬性的名稱空間?

物業類型在以下鏈接DBpedia中使用SPARQL的價值,但我不知道如何從DBpedia中(DBpedia的貓頭鷹 .genre在屬性命名空間我的例子)我不想硬編碼它。任何一個可以幫助我PLZ ...

非常感謝

+1

爲什麼你不想硬編碼?屬性genere有一個固定的URI,它不會改變,爲什麼不把這個URI硬編碼到你的查詢中? – RobV 2011-04-17 17:23:34

+0

bcz有時我可能需要採取一些其他的值,如經度,緯度,頁面有不同的URI,如地理和FOAF ...如果我開始硬編碼,那麼我必須保存所有的網址...這就是爲什麼我沒有想要硬編碼它... – 2011-04-17 17:50:19

回答

5

您最初的問題讓我覺得你想要的東西像耶拿schemagen,它會自動從標識符URI在一個用於生成Java常量集合本體論。然而,DbPedia OWL schema是相當大的,我認爲schemagen可能不會產生有用的結果(我沒有嘗試過)。如果是這樣,您可以隨時選擇您感興趣的資源和屬性的子集,然後在該子集上運行schemagen。

但是,您的澄清評論,您在其中談論使用緯度等其他屬性時,使我認爲您提出了一個不同的問題:即如何避免將特定屬性硬編碼到SPARQL查詢中。對於你來說這是否是一個問題完全取決於你想要解決的問題以及代碼的架構。一個程序完全可以維護許多SPARQL查詢字符串,並且只需選擇一個特定作業所需的字符串即可。這是一種常見的使用模式。

但是,有合法的用例需要採用一般查詢字符串 - 例如select * where {?s ?p "foo"} - 並確保其中一個變量事先綁定到特定值。雖然可以通過字符串操作來實現,但還是有更好的方法。例如,把上面的查詢,並預先綁定?p的財產dc:creator,你可以這樣做:

String q = "select * where {?s ?p \"foo\"}"; 
QuerySolutionMap qsm = new QuerySolutionMap(); 
qsm.bind("p", DC.creator); 
Query query = QueryFactory.create(q); 
QueryExecution exec = QueryExecutionFactory.create(query, model, qsm); 
ResultSet rs = exec.execSelect(); 

this blog posting欲瞭解更多信息,或JavaDoc

+0

感謝您的這些信息...它對我很有幫助.... – 2011-04-19 10:07:40

相關問題