我是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();
}
提前谢谢。
答案 0 :(得分:1)
我不知道在androjena 0.5中运行了哪个版本的Jena,但当前版本的Jena支持
sparqlService(String service, Query query, HttpAuthenticator authenticator)
其中HttpAuthenticator
来自Apache HTTP Client。我不知道这是否适用于androjena。
如果代码不支持它,您可以直接使用本机HTTP操作进行调用,并将结果输入流传递给结果集解析器(请参阅ResultSetFactory
)。