这是我从HttpResponse正文数据中读取Model(在Apache Jena中)的函数
1)public static Model accessModelFromResponse(HttpResponse response) throws Exception {
2) Header contentType = response.getFirstHeader("Content-Type");
3) String mimeType = contentType.getValue();
4) String data = "";
5) if(mimeType.equals("application/ld+json"))
6) {
7) BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
8) String json;
9) while ((json = reader.readLine()) != null) {
10) data += json;
11) }
12) }
13) else if(mimeType.equals("application/json"))
14) {
15) data = (String) Services.addContextToJson(response);
16) mimeType = "application/ld+json";
17) }
18) else
19) {
20) throw new Exception("Data is not json/jsonld type");
21) }
22) InputStream in = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8));
23) Model model = ModelFactory.createDefaultModel();
24) try {
25) model.read(in, "http://myweb.com/", mimeType);
26) } catch (Exception ex) {
27) throw ex;
28) }
29) return model;
30) }
当我使用带有jdk 8的Jena 3.1.0版本时,Everthing工作正常。
但后来为了支持jdk 7我将Jena版本更改为2.13.0并且事情变得更糟。
它抛出java.lang.Exception:com.hp.hpl.jena.shared.NoReaderForLangException:应用程序/ ld + json错误,它发生在第27行。
我认为Jena 2.13.0不支持application / ld + json语言。
我发现如果我在上面设置mimeType的model.read()的第三个参数代码为“JSONLD”它工作正常。但是我仍然怀疑为什么application / ld + json在Jena 3.1.0中工作正常时不能正常工作?仅在以后的版本中支持此功能吗?
答案 0 :(得分:0)
model.read
使用的是一种语言的名称,而不是MIME类型,并且在Jena 2.13.0中没有使用mime类型。您可以在RDFParserRegistry
中查找MIME类型和/或使用RDFDataMgr
进行阅读。