如何将 Sparql 查询结果存储到数组中?

Posted

技术标签:

【中文标题】如何将 Sparql 查询结果存储到数组中?【英文标题】:How to store Sparql query results into array? 【发布时间】:2016-03-24 05:48:33 【问题描述】:

我想将我的 sparql 查询结果存储到数组中。我该如何存储它?这是我的java代码。是否可以在java中使用datareader?

import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.util.FileManager;

public class emotion
public static void main(String[] args) 
    // TODO Auto-generated method stub

sparqltest();


static void sparqltest()


FileManager.get().addLocatorClassLoader(emotion.class.getClassLoader());
Model model= FileManager.get().loadModel("C:/Users/avg/workspacejena32/Jena/bin/emotion.rdf");
//System.out.println("Connected...");
String queryString="PREFIX  xsd:  <http://www.semanticweb.org/avg/ontologies/2016/2/untitled-ontology-5#>" +
                   "PREFIX  owl:  <http://www.w3.org/2002/07/owl#>" +
                   "PREFIX  rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>" +
                   "SELECT  * " +
                   "WHERE" +
                   " xsd:angry xsd:says ?x";




 Query query= QueryFactory.create(queryString);
 QueryExecution qexec=QueryExecutionFactory.create(query, model);

 try 
 ResultSet rs = qexec.execSelect();
for ( ; rs.hasNext() ; )

  QuerySolution soln = rs.nextSolution() ;
  RDFNode a = soln.get("x") ;
 // avg = a.asNode().getLocalName();
  System.out.println(a.asNode().getLocalName());

 
 finally 

 qexec.close();
    

我得到的结果如下,我想将其存储在数组或其他东西中,我可以从中一一调用以供将来使用。

selfish
mad

【问题讨论】:

还有什么问题?你知道如何创建例如ArrayList 并向其添加元素? 不,先生,我不知道如何添加元素。你能帮帮我吗? @AshutoshVikramsingGirase 创建 ArrayList 确实是非常基本的 Java 编程。如果您不知道如何做到这一点,那么您最好的做法可能是编写“Java 初学者”教程。在可以爬行之前不要尝试跑步:) 【参考方案1】:

应该这样做。

List<RDFNode> result = new ArrayList<RDFNode>();
ResultSet rs = qexec.execSelect();
for ( ; rs.hasNext() ; )

  QuerySolution soln = rs.nextSolution() ;
  RDFNode a = soln.get("x") ;
 // avg = a.asNode().getLocalName();
  System.out.println(a.asNode().getLocalName());
  result.add(a);

【讨论】:

它给了我list can not be resolved to typeArrayList can not be resolved to type 的错误。这对 java 6 好吗,因为我使用的是 java 6。Arraylist 是否适用于 java 6? 请添加导入。尝试导入 java.util.*;位于文件顶部的某个位置。 是的,它现在可以工作了。但我的疑问是我现在如何访问存储的元素?我对arraylist不熟悉。 无意冒犯,但也许您应该阅读 Java 介绍教程之类的?如何访问 List 中的内容在这里docs.oracle.com/javase/8/docs/api/java/util/List.html 我认为你需要学习 Java。这是非常基本的东西,包含在任何教程中。即使使用搜索引擎也会提供大量页面来解释它。

以上是关于如何将 Sparql 查询结果存储到数组中?的主要内容,如果未能解决你的问题,请参考以下文章

如何递归扩展 SPARQL 构造查询中的空白节点?

在进行任意路径查询之前过滤 sparql 结果

SPARQL 查询根据语句的顺序返回不同的结果

SPARQL UNION不产生第二个查询的结果。

SPARQL 查询返回空结果集

如何优化我的递归 SPARQL 查询?