如何在sparql中检索列的值

时间:2011-02-10 06:10:49

标签: sparql

在执行查询后,我需要检索列的值。查询运行并在Eclipse控制台中给出正确的答案。我需要从行中检索一个属性值。 完整代码存储在SemanticSearch.java中。从Admin.java调用此函数。

public int searchForUser(String userName, String password)
{ 
  String prolog="PREFIX kb:<"+VUSER.getURI()+">"; 
  System.out.println("Search for user in semantic search.java"); 
  String queryString1=prolog 
    +"\n" +"SELECT interest " 
    +WHERE {?x kb:Uname ?username. ?x kb:Password ?password. ?x kb:Interest ?interest. "            
    +"FILTER regex(?username, \"" +userName +"\" )}"; 
  System.out.println(queryString1); 
  Query query=QueryFactory.create(queryString1); 
  QueryExecution qexec = QueryExecutionFactory.create(query, model);
  ResultSet results1 = qexec.execSelect();

  //System.out.println(results1);
  //ResultSetFormatter.out(results1);
  ResultSetFormatter.out(System.out, results1,query);
  if(results1.getRowNumber()>0)
  {
    QuerySolution soln=results1.nextSolution();
    Literal RES=soln.getLiteral("Interest");
    String RES=results1.
    int res=results1.getRowNumber();
    System.out.println(RES);
    return res;
  }
  else
  {
    return 0;
  }
}

输出是:

PREFIX kb:http://protege.stanford.edu/kb#

SELECT * WHERE {?x kb:Uname ?username. ?x kb:Password ?password. ?x kb:Interest ?interest. FILTER regex(?username, "anu" )}

| x | username | password | interest |
| kb:Anvika | "anu" | "anu" | "C language" |

出现此错误后:

Feb 10, 2011 10:50:56 AM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: 
Servlet.service() for servlet Admin threw exception java.util.NoSuchElementException: QueryIteratorCloseable
at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.nextBinding(QueryIteratorBase.java:93) 
at com.hp.hpl.jena.sparql.engine.ResultSetStream.nextBinding(ResultSetStream.java:74) 
at com.hp.hpl.jena.sparql.engine.ResultSetStream.nextSolution(ResultSetStream.java:91)
at semanticsearch.SemanticSearch.searchForUser(SemanticSearch.java:126) 
at controller.Admin.doGet(Admin.java:84) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
at java.lang.Thread.run(Unknown Source)

我无法在列中检索值。 救命。 问候。

1 个答案:

答案 0 :(得分:1)

好的,那么我的下一个怀疑就是你试图迭代迭代器的结尾。使用条件results1.getRowNumber()&gt; 0是一个非常糟糕的主意,因为它始终是&gt; 0据我所知(虽然ARQ的Javadoc并不清楚)。

相反,我会用results1.hasNext()替换条件,看看是否修复了它

编辑原始答案

我怀疑这只是变量名称区分大小写的情况。

替换行:

Literal RES=soln.getLiteral("Interest");

使用以下行:

Literal RES=soln.getLiteral("interest");

我怀疑它会正常工作。