有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在给定名称的Jena TDB上查询模型

我有个问题

我正在尝试在Jena TDB上加载我的RDF文件

我编写了以下代码:

public void store(){
    String directory = "C:\\tdb";
    String source = "C:\\file1.rdf";
    String source1 = "C:\\file2.rdf";
    Dataset dataset = openTDB(directory);
    Model tdb = loadModel(source, dataset);
    dataset.addNamedModel("File1", tdb);

    Model tdb1 = loadModel(source1, dataset);
    dataset.addNamedModel("File2", tdb1);

    queryTDB(tdb, dataset);
    queryTDB(tdb1, dataset);

    tdb.close();
    tdb1.close();
    dataset.close();
}

public Dataset openTDB(String directory) {
    // open TDB dataset
    Dataset dataset = TDBFactory.createDataset(directory);
    return dataset;
}

public Model loadModel(String source, Dataset dataset) {

    Model tdb = dataset.getDefaultModel();
    FileManager.get().readModel( tdb, source, "RDF/XML" );
    return tdb;
}

特别是,我有两个文件,我想在Jena TDB上加载这些文件。我在互联网上读到,我可以使用“addNamedModel”为我的模型添加一个名称。在上面的代码中,我添加了名称“File1”和“File2”

现在,我想查询此数据集,并尝试编写以下代码:

public void queryTDB(Model tdb, Dataset dataset) {

    String queryStr = "SELECT * { ?s ?p ?o }";

    Query query = QueryFactory.create(queryStr);
    QueryExecution qexec = QueryExecutionFactory.create(query, tdb);
    /*Execute the Query*/
    ResultSet results = qexec.execSelect();
    ResultSetFormatter.out(results) ;
    qexec.close();
}

这段代码可以工作,但我想知道如何仅获取名为“File1”(或“File2”)的模型的查询结果。事实上,如果这样编写查询,我将得到两个模型的结果

我怎么能实现呢


共 (1) 个答案

  1. # 1 楼答案

    你没有使用绝对虹膜来命名你的图形,所以我不知道你的图形名称会是什么。您可以使用这样的查询来帮助找出它们是什么:

    select * {
      graph ?g {  
        ?s ?p ?o
      }
    }
    

    完成后,可以继续使用graph ?g { … }模式,或使用from named在查询中指定一个图形:

    select *
    from named <name-of-graph>
    {
      ?s ?p ?o
    }
    
    select * {
      graph <name-of-graph> {  
        ?s ?p ?o
      }
    }
    

    有关完整细节和更多示例,请参见13.2 Specifying RDF Datasets13.3 Querying the Dataset