2016-07-07 79 views
0

我是onotlogy和Java的新手。我現在學習它,並有一些理論知識。 我在Eclipse和Protege editor 5.0.0 beta 23中使用「apache-jena-3.1.0」。無法讀取Jena中的Protege本體

首先,我在耶拿創建了一個簡單的本體論。類似的東西:

public static void main(String[] args) { 
OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); 
... 
OntClass gen1 = m.createClass(st + "Generation_1"); 
OntClass gen2 = m.createClass(st + "Generation_2"); 
... 
ObjectProperty hasParent = m.createObjectProperty(st + "hasParent"); 
... 
m.write(System.out); 

try { 
m.write(new FileWriter("C:/java/family1_RDF.owl"), "RDF/XML"); 
m.write(new FileWriter ("C:/java/family2_N3.owl"), "N3"); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

它運作良好。我可以在我的應用程序中讀取保存的本體,並在Protege編輯器中打開它。

然後我在Protege中創建了簡單的本體。保存在RDF/XML語法中。 我試圖通過代碼在我的應用程序打開它:

OntModel base = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM_RDFS_INF); 
    try { 
     base.read(new FileReader ("C:/java/asutp_class.owl"), "OWL/XML"); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
    base.write(System.out); 

它沒有工作。 Eclipse向我發送了很多錯誤:

線程「main」中的異常org.apache.jena.riot.RiotException:[line:271,col:120] {E210}使用非ascii字符編碼錯誤。 在org.apache.jena.riot.system.ErrorHandlerFactory $ ErrorHandlerStd.error(ErrorHandlerFactory.java:128) 在org.apache.jena.riot.lang.LangRDFXML $ ErrorHandlerBridge.error(LangRDFXML.java:246) 在org.apache.jena.rdfxml.xmlinput.impl.ARPSaxErrorHandler.error(ARPSaxErrorHandler.java:37) 在org.apache.jena.rdfxml.xmlinput.impl.XMLHandler.warning(XMLHandler.java:196) 的組織。 apache.jena.rdfxml.xmlinput.impl.XMLHandler.warning(XMLHandler.java:173) at org.apache.jena.rdfxml.xmlinput.impl.XMLHandler.warning(XMLHandler.java:168) at org.apache。 jena.rdfxml.xmlinput.impl.ParserSupport.warning(ParserSupport.java:207) 在org.apache.jena.rdfxml.xmlinput.impl.ParserSupport.checkEncoding(ParserSupport.java:192) 在org.apache.jena.rdfxml.xmlinput.impl.URIReference.resolve(URIReference.java:167) 在org.apache.jena.rdfxml.xmlinput.states.WantDescription.startElement(WantDescription.java:63) 的組織。 apache.jena.rdfxml.xmlinput.impl.XMLHandler.startElement(XMLHandler.java:111) at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source) at org.apache.xerces.impl.XMLNamespaceBinder.handleStartElement (來源不明) 在org.apache.xerces.impl.XMLNamespaceBinder.startElement(來源不明) 在org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(來源不明) 在org.apache.xerces.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDispatcher.dispatch(未知來源) at org.apache.xerces.impl.XMLDocumentFragmentS cannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source) at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source) at org.apache.xerces.parsers .XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.jena.rdfxml.xmlinput.impl.RDFXMLParser.parse(RDFXMLParser.java:150) 在org.apache.jena.rdfxml.xmlinput.impl.RDFXMLParser.parse(RDFXMLParser.java:134) 在org.apache.jena.rdfxml.xmlinput.ARP.load(ARP.java:99) 在org.apache .jena.riot.lang.LangRDFXML.parse(LangRDFXML.java:140) 在org.apache.jena.riot.RDFParserRegistry $ ReaderRIOTLang.read(RDFParserRegistry.java:187) at org.apache.jena.riot.RDFDataMgr.process(RDFDataMgr.java:873) at org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:288) at org.apache.jena.riot。 RDFDataMgr.read(RDFDataMgr.java:273) at org.apache.jena.riot.adapters.RDFReaderRIOT.read(RDFReaderRIOT。的java:62) 在org.apache.jena.rdf.model.impl.ModelCom.read(ModelCom.java:245) 在org.apache.jena.ontology.impl.OntModelImpl.read(OntModelImpl.java:2117) 在asutp_lassification.main(asutp_lassification.java:14)

的問題是什麼?我如何在我的耶拿申請中打開Protege的本體論?

非常感謝!

+0

我嘗試了不同的「OntModelSpec」 –

+0

我懷疑耶拿可以在OWL/XML格式讀取的東西。您需要將Protege中的本體保存爲RDF序列化格式,如Turtle或RDF/XML。也就是說,trace *看起來像是試圖讀取XML。該消息說:「使用非ascii字符編碼錯誤。」那裏有非ascii角色嗎? –

+0

正如我寫的 - 我試圖保存在RDF/XML格式 - 同樣的問題。看過那個角色,但沒有找到。這裏分享它:https://drive.google.com/open?id=0B8XNVi6pdRrgLWhHT3p2aEdEaDQ –

回答

1

行271有一個帶有「#АСУ1」的片段,當我查看字節時,它確實不是ASCII碼(它們是UTF-8編碼中的d0 90 d0 a1 d0 a3)。

RDF/XML是一種舊標準和要求的URI(嚴格「RDF URI參考」,這意味着需要的IRI編碼)。龜更擅長直接處理IRI。

+0

非常感謝!問題在於這些符號。我想到了他們,並從Protoge的本體論中刪除了個人,但只是在「Thing」類中將他們移動。現在沒問題,完美地工作。我會考慮龜。 –