无法阅读耶拿的Protege本体

时间:2016-07-07 20:05:37

标签: jena protege

我是onotlogy和Java的新手。我现在学习并掌握一些理论知识。 我在Eclipse和Protege编辑器5.0.0 beta 23中使用“apache-jena-3.1.0”。

首先,我在耶拿创建了一个简单的本体论。这样的事情:

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字符编码错误。     at org.apache.jena.riot.system.ErrorHandlerFactory $ ErrorHandlerStd.error(ErrorHandlerFactory.java:128)     在org.apache.jena.riot.lang.LangRDFXML $ ErrorHandlerBridge.error(LangRDFXML.java:246)     at org.apache.jena.rdfxml.xmlinput.impl.ARPSaxErrorHandler.error(ARPSaxErrorHandler.java:37)     在org.apache.jena.rdfxml.xmlinput.impl.XMLHandler.warning(XMLHandler.java:196)     在org.apache.jena.rdfxml.xmlinput.impl.XMLHandler.warning(XMLHandler.java:173)     在org.apache.jena.rdfxml.xmlinput.impl.XMLHandler.warning(XMLHandler.java:168)     在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)     at org.apache.jena.rdfxml.xmlinput.impl.XMLHandler.startElement(XMLHandler.java:111)     在org.apache.xerces.parsers.AbstractSAXParser.startElement(未知来源)     at org.apache.xerces.impl.XMLNamespaceBinder.handleStartElement(未知来源)     at org.apache.xerces.impl.XMLNamespaceBinder.startElement(未知来源)     at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)     at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl $ FragmentContentDispatcher.dispatch(Unknown Source)     at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)     在org.apache.xerces.parsers.DTDConfiguration.parse(未知来源)     在org.apache.xerces.parsers.DTDConfiguration.parse(未知来源)     在org.apache.xerces.parsers.XMLParser.parse(未知来源)     在org.apache.xerces.parsers.AbstractSAXParser.parse(未知来源)     在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)     在org.apache.jena.riot.RDFDataMgr.process(RDFDataMgr.java:873)     在org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:288)     在org.apache.jena.riot.RDFDataMgr.read(RDFDataMgr.java:273)     在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)

问题是什么?如何在Jena应用程序中打开Protege的本体?

非常感谢!

1 个答案:

答案 0 :(得分:1)

第271行有一个带有“#АСУ1”片段的URI,当我看到这些字节时,确实不是ASCII(它们是UTF-8编码中的d0 90 d0 a1 d0 a3)。

RDF / XML是一种旧标准,需要URI(严格来说是“RDF URI引用”,这意味着IRI需要编码)。 Turtle更善于直接处理IRI。