2016-07-07 117 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”类中将他们移动。现在没问题,完美地工作。我会考虑龟。 –