2 回答
TA贡献1911条经验 获得超7个赞
您可以通过仅获取InputStream提供者AssetManager.open()并将其传递给较新的RDFParserAPI来简化您的代码,例如
InputStream inputStream = AssetManager.open("sample_3.ttl");
Model model = ModelFactory.createDefaultModel();
RDFParser.create().source(inputStream).lang(Lang.TTL).parse(model);
这避免了不必要的读入和写回文件。
然而,它确实需要使用该jena-arq库以及使用最新版本的 Jena(您似乎正在使用 Jena 2 的某些变体,您将需要 Jena 3.7 或更高版本才能使上述内容正常工作)
TA贡献1773条经验 获得超3个赞
我找到了答案。问题是 android studio 中的资产文件无法在 android studio 中读取。它们必须转换为 FileOutputStream,即使在使用 .ttl 文件并在乌龟中读取它们时也是如此。这是代码的示例:
String filePath = context.getFilesDir() + File.separator + "my_turtle.ttl";
File destinationFile = new File(filePath);
FileOutputStream outputStream = new FileOutputStream(destinationFile);
AssetManager assetManager = context.getAssets();
InputStream inputStream = assetManager.open("sample_3.ttl");
byte[] buffer = new byte[1024];
int length = 0;
while((length = inputStream.read(buffer)) != -1){
outputStream.write(buffer,0,length);
}
inputStream.close();
outputStream.close();
Model model = null;
model = FileManager.get().loadModel(filePath,"TTL");
Query query = QueryFactory.create(stringQuery);
QueryExecution qexec = QueryExecutionFactory.create(query, model);
ResultSet results = qexec.execSelect();
while(results.hasNext()) {
QuerySolution soln = results.nextSolution();
Literal answerLiteral = soln.getLiteral("abstract");
answer = answerLiteral.toString();
System.out.println(answer);
}
if(!answer.equals("")){
this.answer = answer;
return answer;
}
else{
return "I could not find an answer";
}
添加回答
举报