2016-07-07 24 views
0

私はonotlogyとJavaを初めて使いました。私は今それを学び、理論的知識を持っています。 Eclipseで "apache-jena-3.1.0"を使用し、Protegeエディタ5.0.0ベータ23を使用します。JenaのProtegeオントロジーを読むことができません

まず、Jenaで簡単なオントロジーを作成しました。次のようなものがあります。

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:[行:271、col:120] {E210}非ASCII文字のエンコーディングエラーです。 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) (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(不明なソース) 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(不明なソース) at org.apache.xerces.parsers.DTDConfiguration.parse(不明なソース) at org.apache.xerces.parsers.DTDConfiguration.parse(不明なソース) at org.apache.xerces.parsers .XMLParser.parse(不明なソース) at org.apache.xerces.parsers.AbstractSAXParser.parse(不明なソース) at org.apache.jena.rdfxml.xmlinput.impl.RDFXMLParser.parse(RDFXMLParser.java:150) 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 (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) asutp_lassification.main(asutp_lassification.java:14)

問題は何ですか?私のJenaアプリケーションでProtegeのオントロジーを開くにはどうすればよいですか?

ありがとうございます!

+0

私は別の "OntModelSpec"を試しました –

+0

私はJenaがOWL/XML形式で物を読むことができるのではないかと疑います。 Protegeのオントロジーは、TurtleやRDF/XMLのようなRDF直列化フォーマットで保存する必要があります。つまり、XMLを読み込もうとしているように見えます。メッセージに「ASCII以外の文字によるエンコーディングエラー」と表示されます。そこにASCII以外の文字がありますか? –

+0

私が書いたように、私はRDF/XML形式で保存しようとしました - 同じ問題です。その文字を探したが見つからなかった。ここで共有しました:https://drive.google.com/open?id=0B8XNVi6pdRrgLWhHT3p2aEdEaQQ –

答えて

1

271行に、 "#АСУ1"という文字列を持つURIがあります。実際にはASCIIではありません(UTF-8エンコーディングではd0 90 d0 a1 d0 a3)。

RDF/XMLは古い標準であり、URI(厳密には「IRIにエンコードが必要」を意味する「RDF URI参照」)が必要です。タートルはIRIを直接扱う方が優れています。

+0

ありがとう!問題は、象徴であった。私はそれらについて考え、Protogeによってオントロジから個人を削除しましたが、「Thing」クラスの下に移動しました。今は大丈夫ですし、完璧に動作します。私はタートルについて考えます。 –

関連する問題