2011-06-07 47 views
1

我試圖用Sparql更新1.1將個人插入到我的文件貓頭鷹中,但它不起作用。如果有人有一個例子,請不要猶豫,給我一個答案。插入一個Induvidual到file.owl

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    String ont="http://localhost:8080/webdav/elearning"; 
    OntModel model=ModelFactory.createOntologyModel(PelletReasonerFactory.THE_SPEC); 
    model.read(ont+".owl"); 
    String requete="PREFIX table: <http://www.owl-ontologies.com/Ontology1239120737.owl#>\r\n" + 
    "INSERT DATA { table:etud1 :APourNom 'Saleh' ." + 
    " table:etud1 :APourLogin 'saleh' ." + 
    " table:etud1 :APourPWD 'saleh' . }"; 

    GraphStore graphstore=GraphStoreFactory.create(); 
    graphstore.setDefaultGraph(model.getGraph()); 
    UpdateRequest updaterequest=UpdateFactory.create(requete); 
    updaterequest.exec(graphstore); 
    System.out.println("OK"); 
} 

當我運行我的程序,我得到一個消息,告訴我,一切正常,但是當我打開我的本體,我沒有找到插入的元素。請幫我解決這個問題。

回答

2

你在這裏做的是更新一個內存圖對象,其中包含拷貝你本體的內容,你最初從http://localhost:8080/webdav/elearning獲取。該副本與坐在端口8080上的應用程序服務器託管的文檔不同,因此您在原始應用程序服務器託管文檔中看不到更改並不奇怪。

基本上有四種方法可以去一下:

  • 與普通的Web服務器(如Tomcat或Jetty),你有一個RDF特定的數據服務器,如Fuseki。然後,正確配置,它將能夠直接響應SPARQL更新請求 - 因此,不要將文檔複製到本地圖形中,而是更新圖形原位

  • 您可以像現在這樣做,然後當您完成更新圖形時,您可以安排HTTP POST將更新後的圖形發送回端口8080上的應用程序服務器。這將需要您設置路徑爲更新(例如http://localhost:8080/webdav/elearning/update)和一個合適的處理程序,但它是相當可行的。

  • 不是通過網址訪問您的本體,您可以訪問文件系統上的文件。但是,一旦完成更新,您將不得不將更新圖的內容保存迴文件系統。

  • 不是通過網址訪問您的本體,您可以將其加載到持久存儲庫中,如TDB。通過這種方法,您可以打開直接連接到存儲的Jena Dataset,並根據該方法運行SPARQL查詢和更新。無需單獨保存任何內容:所有更新都將直接進入TDB實例。

您的原始樣本使用Pellet作爲推理引擎。如果這對您的應用程序很重要,那麼您確實需要內存中的數據副本以提高效率。因此,上述第二種和第三種解決方案比其他解決方案更適合。