无法阅读耶拿(Jena)的Protege本体 [英] Can't read Protege ontology in Jena

查看:179
本文介绍了无法阅读耶拿(Jena)的Protege本体的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是本体论和Java的新手.我现在学习它并具有一些理论知识. 我在Eclipse和Protege编辑器5.0.0 beta 23中使用"apache-jena-3.1.0".

I'm new to onotlogy and Java. I learn it now and have some theoretical knowledge. I use "apache-jena-3.1.0" in Eclipse and Protege editor 5.0.0 beta 23.

首先,我在耶拿创建了一个简单的本体.像这样的东西:

First of all, I created a simple ontology in Jena. Something like that:

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编辑器中打开它.

It works well. I'm able to read saved ontology in my application and to open it in Protege editor.

然后,我在Protege中创建了简单的本体.将其保存为RDF/XML语法. 我试图通过以下代码在我的应用程序中打开它:

Then I created simple ontology in Protege. Saved it in RDF/XML Syntax. I tried to open it in my application by the code:

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给我带来了很多错误:

It didn't work. Eclipse sent me a lot of mistakes:

线程主"中的异常org.apache.jena.riot.RiotException:[行:271,列: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) 在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) 在org.apache.jena.rdfxml.xmlinput.impl.XMLHandler.startElement(XMLHandler.java:111) 在org.apache.xerces.parsers.AbstractSAXParser.startElement(未知来源) 在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(未知来源) 在org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(未知来源) 在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)

Exception in thread "main" org.apache.jena.riot.RiotException: [line: 271, col: 120] {E210} Encoding error with non-ascii characters. at org.apache.jena.riot.system.ErrorHandlerFactory$ErrorHandlerStd.error(ErrorHandlerFactory.java:128) at org.apache.jena.riot.lang.LangRDFXML$ErrorHandlerBridge.error(LangRDFXML.java:246) at org.apache.jena.rdfxml.xmlinput.impl.ARPSaxErrorHandler.error(ARPSaxErrorHandler.java:37) at org.apache.jena.rdfxml.xmlinput.impl.XMLHandler.warning(XMLHandler.java:196) at org.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) at org.apache.jena.rdfxml.xmlinput.impl.ParserSupport.checkEncoding(ParserSupport.java:192) at org.apache.jena.rdfxml.xmlinput.impl.URIReference.resolve(URIReference.java:167) at org.apache.jena.rdfxml.xmlinput.states.WantDescription.startElement(WantDescription.java:63) at org.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(Unknown Source) at org.apache.xerces.impl.XMLNamespaceBinder.startElement(Unknown Source) 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) 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) at org.apache.jena.rdfxml.xmlinput.impl.RDFXMLParser.parse(RDFXMLParser.java:134) at org.apache.jena.rdfxml.xmlinput.ARP.load(ARP.java:99) at org.apache.jena.riot.lang.LangRDFXML.parse(LangRDFXML.java:140) at 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) at org.apache.jena.rdf.model.impl.ModelCom.read(ModelCom.java:245) at org.apache.jena.ontology.impl.OntModelImpl.read(OntModelImpl.java:2117) at asutp_lassification.main(asutp_lassification.java:14)

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

What the problem is? How can I open Protege's ontology in my Jena application?

非常感谢!

推荐答案

第271行有一个URI,其片段带有#АСУ1",当我查看这些字节时,它们的确不是ASCII(它们在UTF-8编码).

Line 271 has a URI with fragment with "#АСУ1" which when I look at the bytes are indeed not ASCII (they are d0 90 d0 a1 d0 a3 in UTF-8 encoding).

RDF/XML是一个旧标准,并且需要URI(严格来说是"RDF URI引用",这意味着IRI需要编码). Turtle更擅长直接处理IRI.

RDF/XML is an old standard and requires URIs (strictly "RDF URI References" which means IRIs need encoding). Turtle is better at handling IRIs directly.

这篇关于无法阅读耶拿(Jena)的Protege本体的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆