2014-02-12 36 views
1

我正在使用Jena來讀取RDFa文件。 創建模型後,我將RDFa文件讀入模型中。 (Jena的基本用法)Jena:使用inputstream讀取模型

當我在線存儲文件並將URL傳遞給模型時,一切都按預期工作,並且文件的內容與RDFa信息一起可用於進一步處理。當我在本地存儲文件時,我可以使用路徑名「file:///Users/Piejero/file.xhtml」訪問該文件,這裏再次正常工作。 但是,當我訪問同一個文件(本地)使用一個InputStream(從文件),我收到以下錯誤:

Exception in thread "main" org.apache.jena.riot.RiotException: {E202} Expecting XML start or end element(s). String data "Metadata" not allowed. Maybe there should be an rdf:parseType='Literal' for embedding mixed XML content in RDF. Maybe a striping error.

(「元數據」是XHTML頁面的編碼使用Unicode( UTF-8))

我認爲我們正在處理IO問題,但您如何解決它?從我的實驗中我可以得出結論:文件本身沒有問題?

發生故障的情況下,代碼是

JenaRdfaReader.inject(); 
Model model = ModelFactory.createDefaultModel(); 
File f = new File("/Users/Piejero/file.xhtml"); 
model.read(new FileInputStream(f), "RDFA"); 

我使用Semargl添加到耶拿RDFa的支持。

+1

看起來這是在RDF/XML而不是RDFa中解析的。 'striping errors'是一個rdf/xml的東西。 – user205512

回答

1

問題可能已經解決,但這裏是它對我的工作原理。代碼只是使用文件讀取器而不是InputStream

 JenaRdfaReader.inject(); 
    Model m = ModelFactory.createDefaultModel(); 
    try { 
     m.read(new FileReader("C:\\data\\workspaces\\websites\\bla.htm"), "", "RDFA"); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    }