2015-02-07 59 views
1

我知道你可以提取RDF文件和初始化使用此代碼在耶拿型號:
如何從jena fuseki服務器獲取rdf文件並將其初始化爲Apache Jena中的OntModel?

DatasetAccessor accessor = DatasetAccessorFactory.createHTTP("http://localhost:3030/ds/data"); Model updated = accessor.getModel();


但是當我試圖把它在OntModel這樣的:

OntModel updated = accessor.getModel(); 

它產生了這樣的錯誤:Incompatible types: Model cannot be converted to OntModel

而且當我嘗試這樣做時:OntModel model = (OntModel) accessor.getModel();

它仍然輸出一個錯誤說:com.hp.hpl.jena.rdf.model.impl.ModelCom cannot be cast to com.hp.hpl.jena.ontology.OntModel

+0

什麼是錯誤? – AndyS 2015-02-07 19:30:54

+0

感謝您對@AndyS的快速回復,對於不完整的問題感到抱歉。錯誤是:'不兼容的類型:模型不能轉換爲OntModel' – 2015-02-07 20:35:45

+1

請參閱ModelFactory,該類有一些操作可以使OntModel成爲普通模式。 – AndyS 2015-02-09 08:35:09

回答

0

你可能無法從定式直接拿到OntModel,但是你可以做的是保存模型在一個本地文件,然後讀入一個OntModel。例如: -

OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); 
    DatasetAccessor myDA = DatasetAccessorFactory.createHTTP("URL"); 
    Model model = myDA.getModel("GRAPH"); 

File myFile = new File(_path); 
     try 
     { 
      PrintStream ps_Writer = new PrintStream(myFile); 
      _model.write(ps_Writer, "TTL").toString(); 

     } 
     catch (FileNotFoundException ex) 
     { 

     } 
ontModel.read(_path); 

要記住,你必須在創建OntModel(在我的情況下使用OWL_MEM)指定的OntModelSpec,並確保您使用時您保存到OntModel的定式相同的規格是非常重要的。我花了一段時間才發現,當您使用DatasetAccessor.putModel將OntModel放入Fuseki中時,它會將其轉換爲正常的rdf Model,如果您未指定OntModelSpec,則在轉換時它將應用一些推理,而您會發現在Fuseki的結果是不完全相同的。