2015-02-23 66 views
0

我正在使用Jena來讀取本體,並且迄今爲止它工作得非常好。不幸的是,我一直無法弄清楚如何使用我在模型中定義的緊湊型uris。我已經使用模型的setNSPrefix(String prefix, String uri)方法定義了前綴。當我嘗試使用前綴檢索語句時,我什麼也得不到。另外,當我成功檢索一個Statement時,它包含完整的URI而不是我定義的緊湊的URI。它甚至會做的XSD URI http://www.w3.org/2001/XMLSchema#在Jena中使用簡潔的URI

例如,我使用URI http://www.example.com#,我定義我的前綴映射爲ex,和我的發言是http://www.example.com#father http://www.example.com#parentOf http://www.example.com#child其中父親是主體,parentOf是謂語,孩子是對象。如果我嘗試使用ex:father來檢索它,我不會得到任何結果,並且當我確實得到語句時,完整的uri就是主題,謂詞和對象。當我做model.write(OutputStream)時,我已經看到它使用前綴而不是uri,但這對我沒有特別的幫助。我是否可以使用前綴代替uri,就像我一直在試圖做的那樣,還是那不是耶拿會爲我提供的東西?

回答

1

當我嘗試使用前綴檢索語句時,我什麼都沒有。

你不能這樣做,例如,

model.getResource("ex:foo")` 

你要做

model.getResource("http://example.org/foo"); 

可以作出這樣的簡單,當然,通過

String EX = "http://example.org/"; 
model.getResource(EX+"foo"); 

前綴實際上只是爲了使序列化更好閱讀和寫作。

+0

所以,當我得到一個基於資源的聲明,有什麼辦法顯示前綴而不是完整的uri,或者它是否處於類似的情況?例如,當我真的想要'ex:child'時,statement.getObject()將返回'http:// www.example.com#child'。 – endorphins 2015-02-23 18:53:55

+0

沒有通用的方法來做到這一點。例如,如果在模型中定義了兩個前綴:「ex:http://www.example.com#」和「ex2:ex:http://www.example.com#chi」,會怎麼樣?你想要ex:child還是ex2:ld?如果沒有前綴會怎麼樣?如果它是不可縮寫的IRI呢?如果你想要類似的東西,你將不得不通過檢查給定的IRI是否可以被模型中聲明的任何前綴縮寫來滾動你自己。 – 2015-02-23 18:58:38

+0

好吧,這就是我想我必須做的。我的想法是從模型中獲取前綴映射,使用它來查看uri是否有前綴,然後將其作爲前綴而不是完整的uri進行編寫。 – endorphins 2015-02-23 19:03:46