1

こんにちは、som rdf ファイルを読み取るために jena を使用しています。

    InputStream in = FileManager.get().open(adress);
    model.read(in, adress);

時々 SAXParseException をスローする 2 行目の問題:

org.xml.sax.SAXParseException: Element or attribute do not match QName production: QName::=(NCName':')?NCName. 
com.hp.hpl.jena.shared.JenaException: org.xml.sax.SAXParseException: Element or attribute do not match QName production: QName::=(NCName':')?NCName. 
    at com.hp.hpl.jena.rdf.model.impl.RDFDefaultErrorHandler.fatalError(RDFDefaultErrorHandler.java:45)
    at com.hp.hpl.jena.rdf.arp.impl.ARPSaxErrorHandler.fatalError(ARPSaxErrorHandler.java:35)
    at com.hp.hpl.jena.rdf.arp.impl.XMLHandler.warning(XMLHandler.java:225)
    at com.hp.hpl.jena.rdf.arp.impl.XMLHandler.fatalError(XMLHandler.java:255)
    at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLEntityScanner.scanQName(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 com.hp.hpl.jena.rdf.arp.impl.RDFXMLParser.parse(RDFXMLParser.java:142)
    at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:158)
    at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:145)
    at com.hp.hpl.jena.rdf.arp.JenaReader.read(JenaReader.java:215)
    at com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.java:197)

だから私はいくつかのtry catchブロックをしたいと思っています。問題は、私がこれを行うとき、コンパイラが返すことです:

例外 org.xml.sax.SAXParseException が、対応する try ステートメントの本体でスローされることはありません

では、この例外をどのようにチャットできますか? 例外だけをキャッチできることはわかっていますが、問題がどこで発生したかはわかりません

4

3 に答える 3

1

SAXParseExceptionの代わりにJenaExceptionをキャッチする必要があります。次に、SAXParseExceptionである可能性のある原因を取得してみてください。

于 2012-04-16T08:57:14.233 に答える
1

SAXParserException は「チェック済み例外」であり、スローされた場合、メソッド シグネチャが強制的に宣言されることを意味します。明らかに、呼び出すメソッドはそれを宣言していないため、キャッチできません。

Jena は実際にその例外を「チェックされていない例外」(つまり、RuntimeException を拡張する例外) にラップしているように見えます。この例外は実際にはJenaException. そのため、 a に try/catch を追加してから、Jena が遭遇した元のエラーを見つけるためにJenaException使用できます。getCause()

于 2012-04-16T08:55:03.307 に答える
0

RDF XML 入力の問題を処理したい場合は、Jena リーダーへのエラー ハンドラー インターフェイスを使用する、より直接的な方法があります。

于 2012-04-16T21:54:48.837 に答える