【发布时间】:2013-11-13 09:08:11
【问题描述】:
public class MainClass {
public static void main(String[] args) {
MainClass c = new MainClass();
c.getType("m.012x34");
System.out.println("---------------");
MainClass c1 = new MainClass();
c1.getType("m.012x34");
}
public String getType(String mid){
String Type = null;
try{
InputStream inputStream = null;
Resource resource = null;
File automake_triples = new File(".\\automake_triples.ttl");
ArrayList<String> products = new ArrayList<String>();
InputStream in = new FileInputStream(automake_triples);
final Model model = ModelFactory.createMemModelMaker().createDefaultModel();
model.read(in ,null , "Turtle");
in.close();
String queryString =
"SELECT ?type" +
" WHERE {" +
" ?mid <type.type> ?type ." +
" }";
final Query query = QueryFactory.create(queryString);
final ParameterizedSparqlString pss = new ParameterizedSparqlString(queryString);
final QuerySolutionMap map = new QuerySolutionMap();
final Resource res_mid = model.getResource(mid);
map.add("mid", (RDFNode) res_mid);
pss.setParams(map);
System.out.println(pss);
QueryExecution qe = QueryExecutionFactory.create(pss.toString(), model);
ResultSetFormatter.out( QueryExecutionFactory.create( pss.toString(), model ).execSelect() );
qe.close();
}catch(Exception ex){
System.out.println(ex);
ex.printStackTrace();
}
return Type;
}
}
Sample Input (In the ttl file):
<m.012x34>
<automotive.company.make_s> <m.0h5wslk> ;
<type.object.name> "Jaguar" ;
<type.type> "automotive.company" .
<m.0ywc>
<automotive.company.make_s> <m.0h5wtfh> , <m.06m97r> ;
<type.object.name> "Aston Martin" ;
<type.type> "automotive.company" .
Sample Output:
SELECT ?type WHERE { <m.012x34> <type.type> ?type .}
------------------------
| type |
========================
| "automotive.company" |
------------------------
---------------
SELECT ?type WHERE
{ <m.012x34> <type.type> ?type .}
--------
| type |
========
--------
执行此代码时,它会第一次返回正确的值。但是当getType 被第二次调用时它不会返回任何值,即使请求具有相同的值。似乎有一些我找不到的问题。有什么问题?
【问题讨论】:
-
尽管有结果,但它是空的是什么意思。我明白为什么,如果您的数据与查询匹配,您会得到一个带有
null值的非空结果集。请显示您的输入数据和实际得到的输出。 -
当我将您的代码加载到 Eclipse 中时,我注意到有许多不必要的东西。例如,
query从未使用过。将来,请尝试将代码简化为重现问题的最小示例。通常,这样做的过程会揭示问题所在。 -
我正在尝试运行您的代码,但输出确实 not 看起来像您显示的输出。请逐字复制并粘贴您的输出。
-
只是为了良好的实践,你应该考虑分解你的代码,以便每个函数只做一个“事情”,这将使你能够以指数速度更快地找出问题代码,并具有 self 的额外好处文档。