无法阅读耶拿的 Protege ontology
Can't read Protege ontology in Jena
我是本体论的新手 Java。我现在学习它,并且有一些理论知识。
我在 Eclipse 和 Protege 编辑器 5.0.0 beta 23 中使用 "apache-jena-3.1.0"。
首先,我在耶拿创建了一个简单的ontology。类似的东西:
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();
}
效果很好。我能够在我的应用程序中读取保存的 ontology 并在 Protege 编辑器中打开它。
然后我在 Protege 中创建了简单的 ontology。将其保存在 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)
在 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)
问题是什么?如何在我的 Jena 应用程序中打开 Protege 的 ontology?
非常感谢!
第 271 行有一个带有“#АСУ1”片段的 URI,当我查看字节时确实不是 ASCII(它们是 UTF-8 编码的 d0 90 d0 a1 d0 a3)。
RDF/XML 是一个旧标准并且需要 URI(严格来说 "RDF URI References" 这意味着 IRI 需要编码)。 Turtle 更擅长直接处理 IRI。
我是本体论的新手 Java。我现在学习它,并且有一些理论知识。 我在 Eclipse 和 Protege 编辑器 5.0.0 beta 23 中使用 "apache-jena-3.1.0"。
首先,我在耶拿创建了一个简单的ontology。类似的东西:
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();
}
效果很好。我能够在我的应用程序中读取保存的 ontology 并在 Protege 编辑器中打开它。
然后我在 Protege 中创建了简单的 ontology。将其保存在 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) 在 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)
问题是什么?如何在我的 Jena 应用程序中打开 Protege 的 ontology?
非常感谢!
第 271 行有一个带有“#АСУ1”片段的 URI,当我查看字节时确实不是 ASCII(它们是 UTF-8 编码的 d0 90 d0 a1 d0 a3)。
RDF/XML 是一个旧标准并且需要 URI(严格来说 "RDF URI References" 这意味着 IRI 需要编码)。 Turtle 更擅长直接处理 IRI。