Как я могу запросить модель на Jena TDB по имени

У меня вопрос.

Я пытаюсь загрузить мои файлы RDF на Jena TDB.

Я написал этот код:

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". При этом в приведенном выше коде я добавил имена "Файл1" и "Файл2".

Теперь я хочу запросить этот набор данных, и я пытаюсь написать этот код:

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 ответ

Решение

Вы не используете абсолютные IRI для именования графиков, поэтому я не знаю, как будут называться ваши графики. Вы можете использовать запрос как этот, чтобы помочь выяснить, что они:

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 Задание наборов данных RDF и 13.3 Запрос набора данных для получения полной информации и дополнительных примеров.

Другие вопросы по тегам