2013-11-22 87 views
1

我想新的節點添加到我的RDF文件,我第一次提出的文件我寫的東西,如:如何使用Apache Jena在RDF文檔中編寫新節點?

String eventosURI = "http://Eventos"; 
    String path = getServletContext().getRealPath("/") + "DataBase/Events.xml"; 
    Model base = ModelFactory.createDefaultModel(); 
    Resource node = base.createResource(eventosURI).addProperty(VCARD.NAME, something); 
    try{ 
     FileOutputStream fos = new FileOutputStream(path); 
     base.write(fos); 
    } catch(Exception e){ 
     out.println(e.getMessage()); 
    } 

但後來我不得不更多的節點添加到同一個文件,如果我叫同servlet重新創建模型並覆蓋其他節點。

我嘗試改變與此FileOutputStream中:

FileWriter write = new FileWriter(path, true); 
    base.write(write); 

這工作,但不是我想要的,因爲再寫整個結構......有什麼辦法已經創建的節點添加到RDF的方式嗎?

+0

你的意思是你想從原始文件到內存中加載模型,一些數據添加到內存模型,然後寫模型恢復到文件中? –

+1

或者,如果您以N-Triples格式序列化數據,則可以通過將輸出發送到文件來將更多數據添加到文件。 –

回答

1

ModelFactory.getDefaultModel()創建一個空的存儲器內的模式。如果你想編輯一個現有的模型,你需要先加載它。

你有幾種方法來做到這一點。

一種是使用Model.read(InputStream, String, String)。這將InputStream傳遞給現有模型,圖中相對URI的基本URI和序列化語言(RDF/XML是默認的,它還支持TURTLE和N-TRIPLE)。該方法將所有語句添加到模型:

Model model = ModelFactory.createDefaultModel(); 
if (path.exists()) { 
    model.read(new FileInputStream(path), null, "TURTLE"); // or whatever format you used 
} 

然後,您將擁有所有先前保存在模型中的語句。