java - 如何在 .nt 文件上保存 sparql 查询的结果

标签 java rdf sparql nt

我想将 dbpedia 电影的所有三元组保存在 N-Triple 文件(.nt 文件)中,我使用 java 应用程序对 dbpedia 端点进行查询并将结果保存在文件中,但我无法读取此文件并从中查询!你能帮帮我吗?

//保存结果的代码在这里

try{
            FileWriter fostream = new FileWriter("C:\\Documents and Settings\\me\\Desktop\\DataSets\\dbpediafilmdataset.nt");
            BufferedWriter out = new BufferedWriter(fostream);
            String service ="http://dbpedia.org/sparql";

            String query = 
            "SELECT ?s ?p ?o " +
            "WHERE {" +
            " ?s <http://dbpedia.org/property/wordnet_type> <http://www.w3.org/2006/03/wn/wn20/instances/synset-movie-noun-1> ; ?p ?o "+
            "      } ";

            QueryExecution qexecctest = QueryExecutionFactory.sparqlService(service, query);

            try {
            ResultSet responseetest = qexecctest.execSelect();

            while( responseetest.hasNext()){
                QuerySolution solnntest = responseetest.nextSolution();
                RDFNode p = solnntest.get("?p");
                RDFNode o = solnntest.get("?o");
                RDFNode s = solnntest.get("?s");
                String object="";
                String triple="";
                if (o.isLiteral()==true)
                {
                    object="\"" + o.toString() + "\"";
                }
                else
                object="<" + o.toString() + ">";

                triple="<" + s + ">"+" " + "<" + p + ">" + " " + object + " " + "." ;

                out.write(triple);
                out.newLine();

                }
            } finally {
            qexecctest.close();
            out.close();}

            }catch (Exception e){
              System.err.println("Error: " + e.getMessage());}

当我想读取结果文件并从中获取查询时,它会给出如下错误:

com.hp.hpl.jena.rdf.model.impl.IStream.readChar(NTripleReader.java:485)
com.hp.hpl.jena.rdf.model.impl.NTripleReader.unwrappedReadRDF(NTripleReader.java:140)
com.hp.hpl.jena.rdf.model.impl.NTripleReader.readRDF(NTripleReader.java:120)
com.hp.hpl.jena.rdf.model.impl.NTripleReader.read(NTripleReader.java:84)
com.hp.hpl.jena.rdf.model.impl.NTripleReader.read(NTripleReader.java:72)
com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.java:226)
com.hp.hpl.jena.util.FileManager.readModelWorker(FileManager.java:395)
com.hp.hpl.jena.util.FileManager.readModel(FileManager.java:335)
com.hp.hpl.jena.util.FileManager.readModel(FileManager.java:319)
....

最佳答案

最好用 CONSTRUCT 来做到这一点询问。看看它,它是专门为此目的而设计的。使用 Jena 只需执行以下操作:

Model results = qexec.execConstruct();
results.write(out, "TURTLE");

也有说明here

主要优点是您无需担心用 Turtle 或任何其他格式编写三元组,Jena 会为您完成。

您的 CONSTRUCT 查询最终可能看起来像:

CONSTRUCT { ?s ?p ?o }
WHERE {
    ?s <http://dbpedia.org/property/wordnet_type>        
         <http://www.w3.org/2006/03/wn/wn20/instances/synset-movie-noun-1> ; 
         ?p ?o 
}

关于java - 如何在 .nt 文件上保存 sparql 查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6484145/

相关文章:

java - Oracle RDF 表在保存三元组时抛出 ORA-22835 错误

linux - 在 Fuseki 服务器上启用 HTTPS/SSL?

tree - 来自主题的 sparql 完整树

java - 将 ExtentTest 的默认值设置为 FAILED

python - 使用 RDFAlchemy 和 rdflib 根据 URI 检索对象

rdf - 使用 Sesame 将 Topbraid Composer 连接到 Stardog

json - 如何在 JSON-LD 中返回 SPARQL 结果?

java - 如何忽略 JSON 属性的底层结构并将其存储为字符串?

java - 使用 ADT 在 Eclipse 上开发 Android 应用程序。停止进程(应用程序)的最快方法?

java - 有人可以插入我朝正确的方向前进吗? Java XML 和结果集