2012-09-12 36 views
1

我正在嘗試創建一個新的本體,並在一些操作保存之後。它創建得很好,我在處理類和其他事情方面沒有問題,但是當我嘗試將它保存到本地文件時給我一個錯誤! 我的代碼是:用jena保存本體的錯誤

//create a new ontology 
SOURCE = "http://www.w3.org/2002/07/owl#"; 
NS = SOURCE + "#"; 
ontology = ModelFactory.createOntologyModel(); 
ontology.read(SOURCE, "RDF/XML"); 
///////some actions 
//save the ontology 
try { 
     File file= new File("Log.owl"); 
     ontology.write(new FileOutputStream(file)); 

    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 

和錯誤是:

Exception in thread "main" com.hp.hpl.jena.shared.BadURIException: Only well-formed absolute URIrefs can be included in RDF/XML output: <d> Code: 57/REQUIRED_COMPONENT_MISSING in SCHEME: A component that is required by the scheme is missing. 
at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.checkURI(BaseXMLWriter.java:829) 
at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.xmlnsDecl(BaseXMLWriter.java:348) 
at com.hp.hpl.jena.xmloutput.impl.Basic.writeRDFHeader(Basic.java:56) 
at com.hp.hpl.jena.xmloutput.impl.Basic.writeBody(Basic.java:39) 
at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.writeXMLBody(BaseXMLWriter.java:500) 
at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:472) 
at com.hp.hpl.jena.xmloutput.impl.BaseXMLWriter.write(BaseXMLWriter.java:458) 
at com.hp.hpl.jena.rdf.model.impl.ModelCom.write(ModelCom.java:271) 
at com.hp.hpl.jena.ontology.impl.OntModelImpl.write(OntModelImpl.java:2552) 

我知道, 「http://www.w3.org/2002/07/owl#」 的格式是龜但我想要RDF/XML中的本體論,我不知道該寫什麼,而不是該鏈接。我嘗試了不同的鏈接,但每次都會給我另一個錯誤。源應該成爲一個真正的聯繫?

Thaks for any reply!

回答

1

最後,我設法找到解決方案!這比我想象的要容易!我的問題在於創建類。我的代碼是:

ontology.createClass(word); 

我不得不寫:

ontology.createClass(NS+word); 

小菜一碟!

+0

基本上,解決這類錯誤的方法是添加「命名空間」;無論是在課堂上還是在個人主題,對象,謂詞(資源)中。沒有命名空間,它不允許在RDF/XML中編寫本體 –

1

嘗試閱讀的海龜 - 。輸出將是RDF/XML(但要使用RDF/XML的縮寫,其整潔內部,它被保存爲三倍,而不是在一些具體的語法,閱讀

+0

謝謝安迪。我可以使用TURTLE運行它,但輸出也在TURTLE! – Mahdieh

0

你需要使用格式"TURTLE",不"RDF/XML"閱讀本體。您可以選擇書寫時,看到Jena Model javadoc不同版本的write()方法的不同格式,選擇一個在那裏你可以指定輸出格式(lang),並使用"RDF/XML-ABBREV"作爲AndyS說。

例外是因爲你使用了一個簡單的字符串(顯然是012 (例如"http://example.com/mydata#d")。也許在致電createResource()

+0

感謝您的建議cygri.I與TURTLE沒有問題,它完美的工作,但我希望輸出在RDF/XML和當我寫ontology.write(新的FileOutputStream(文件),「RDF/XML-ABBREV」);它再次給我那個錯誤!不幸的是我無法理解你最後的問題。 – Mahdieh

+0

錯誤出現在代碼的'/////// some actions'部分。 – cygri

+0

不,這個錯誤正好寫在本地文件上!我仔細追蹤過它。 – Mahdieh