授权凭证sparql

时间:2014-01-02 18:39:43

标签: android authentication sparql resultset

我是sparql查询的新手。我尝试从我的Android设备发送一个sparql查询到EndPointURI远程服务器,这样我就可以得到结果。我想选择与“鲑鱼”相匹配的所有结果,如下面的代码所示 我的问题在于这一行:“ResultSet resultSet = qe.execSelect();” 当我试图取得结果时,我得到了 libcore.net.http.httpURLConnectionImpl.get上没有发现身份验证质询。授权凭据
这是因为myURL需要身份验证凭据而且我不知道如何发送它们 关于如何成功发送用户名和密码的任何想法?
我的进口是:

import com.hp.hpl.jena.query.Query;    
import com.hp.hpl.jena.query.QueryExecution;    
import com.hp.hpl.jena.query.QueryExecutionFactory;    
import com.hp.hpl.jena.query.QueryFactory;    
import com.hp.hpl.jena.query.ResultSet;    
import com.hp.hpl.jena.query.Syntax;    

我的libs文件中的.jars是:

androjena_0.5,    
arqoid_0.5,    
icu4j_3_4,   
iri-0.8,   
lucenoid_3.0.2,    
slf4j-android-1.6.1-RC1    

最后我的功能

public String queryRemoteSparqlEndpoint()    
{    
      String username="lala";    
      String password="lala";    
      String queryString = "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> select ?sp"    
       +where {"   
       +"<URL>"    
       +"?sp \"salmon\"."    
       +"}";    

     String sparqlEndpointUri = "myURL/sparql";    

     Query query = QueryFactory.create(queryString, Syntax.syntaxARQ);   

     query.setLimit(10);    

       Authenticator.setDefault(new Authenticator() {    
      @Override    
      protected PasswordAuthentication getPasswordAuthentication() {    
          return new PasswordAuthentication(username, password.toCharArray());    
      }    
  });

     QueryExecution qe = QueryExecutionFactory.sparqlService(sparqlEndpointUri, query);

     ResultSet resultSet = qe.execSelect();       
     while (resultSet.hasNext())    
     {    
       //.....
     }    
     return results.toString();      
}    

提前谢谢。

1 个答案:

答案 0 :(得分:1)

我不知道在androjena 0.5中运行了哪个版本的Jena,但当前版本的Jena支持

sparqlService(String service, Query query, HttpAuthenticator authenticator)

其中HttpAuthenticator来自Apache HTTP Client。我不知道这是否适用于androjena。

如果代码不支持它,您可以直接使用本机HTTP操作进行调用,并将结果输入流传递给结果集解析器(请参阅ResultSetFactory)。