Как получить значение столбца в sparql - PullRequest
0 голосов
/ 10 февраля 2011

Ineed для получения значения столбца после выполнения запроса. Запрос выполняется и дает мне правильный ответ в консоли 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 Ответ

1 голос
/ 10 февраля 2011

Хорошо, тогда мое следующее подозрение будет то, что вы пытались выполнить итерацию после конца итератора.Использование условия results1.getRowNumber ()> 0 - очень плохая идея, поскольку, насколько я могу судить, оно всегда будет> 0 (хотя это не ясно из Javadoc для ARQ).

Вместо этого я бы заменил условие на results1.hasNext () и посмотрел, исправляет ли это

Отредактированный оригинальный ответ

Я подозреваю, что это всего лишь случайимена переменных чувствительны к регистру.

Замените строку:

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

на строку:

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

И я подозреваю, что она будет работать нормально.

...