首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在游戏中显示SPARQL查询的输出!查看?

如何在游戏中显示SPARQL查询的输出!查看?
EN

Stack Overflow用户
提问于 2012-08-25 23:29:26
回答 1查看 2.3K关注 0票数 1

我正在编写一个应用程序,用户可以在其中上传.rdf文件,然后在其中执行SPARQL查询。现在,我陷入了如何格式化查询结果的困境。例如:ASK-Query输出一个布尔值,SELECT-Query返回一个ResultSet。CONSTRUCTDESCRIBE返回一个新的RDF图。

如何在表单中获取给定查询的结果,以便将其传递给我的视图?在那里,我希望打印出一个HTML表格。

为了更好地理解我的问题,我创建了这个简约的代码示例:

代码语言:javascript
复制
import java.io.InputStream;

import com.hp.hpl.jena.*;

public class playground {

    public static void main(String[] args) {

      InputStream in = FileManager.get().open("vc-db-1.rdf");
      Model model = ModelFactory.createDefaultModel();
      model.read(in, null);

      String queryStringSelect = "SELECT ?subject ?predicate ?object WHERE { ?subject ?predicate ?object }";
      String queryStringAsk = "ASK WHERE { ?subject ?predicate ?object }";
      String queryStringDescribe = "DESCRIBE * WHERE { ?subject ?predicate ?object }";
      String queryStringConstruct = "CONSTRUCT { ?subject ?predicate ?object } WHERE { ?subject ?predicate ?object }";

      QueryExecution qe = QueryExecutionFactory.create(queryStringDescribe,
        model);
      Query q = QueryFactory.create(queryStringDescribe);

      int queryType = q.getQueryType();
      switch (queryType) {
      case Query.QueryTypeAsk:
          boolean b = qe.execAsk(); // Result that has to be formatted
          ResultSetFormatter.outputAsTSV(System.out, b);
          break;
      case Query.QueryTypeConstruct:
          model = qe.execConstruct(); // Result that has to be formatted
          model.write(System.out);
          break;
      case Query.QueryTypeDescribe:
          model = qe.execDescribe(); // Result that has to be formatted
          model.write(System.out);
          break;
      case Query.QueryTypeSelect:
          ResultSet results = qe.execSelect(); // Result that has to be
                 // formatted
          ResultSetFormatter.outputAsTSV(System.out, results);
          break;
      }

      model.close();
      qe.close();

    }

}

可以从以下位置下载提及的.rdf文件:http://jena.apache.org/tutorials/sparql_data/vc-db-1.rdf

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-28 18:20:58

我终于找到了答案:

我使用ByteArrayOutputStream并使用各种model.write()函数来完成剩下的工作。对于SELECT-Query,我使用文本表示,因为提供的ResultSetFormatter.outputAsRDF()让我可以返回许多无用的东西。不管怎样,下面是相关的代码

代码语言:javascript
复制
ByteArrayOutputStream baos = new ByteArrayOutputStream();
...
int queryType = q.getQueryType();
switch (queryType) {
case Query.QueryTypeAsk:
    boolean b = qe.execAsk();
    ResultSetFormatter.outputAsRDF(baos, notation, b);
    retval = baos.toString();
    break;
case Query.QueryTypeConstruct:
    model = qe.execConstruct();
    model.write(baos, notation);
    retval = baos.toString();
    break;
case Query.QueryTypeDescribe:
    model = qe.execDescribe();
    model.write(baos, notation);
    retval = baos.toString();
    break;
case Query.QueryTypeSelect:
    ResultSet results = qe.execSelect();
    ResultSetFormatter.out(baos, results);
    retval = baos.toString();
    break;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12123270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档