Ключ в том, чтобы признать, что в Йене Model
является одной из центральных абстракций.Модель логического вывода - это просто Model
, в которой присутствуют некоторые из троек, поскольку они основаны на правилах вывода, а не считываются из исходного документа.Таким образом, вам нужно всего лишь изменить первую строку вашего примера, где вы изначально создаете модель.
Хотя вы можете создавать модели логического вывода напрямую, зачастую проще всего просто создатьOntModel
с необходимой степенью логической поддержки:
Model model = ModelFactory.createOntologyModel( OntModelSpec.RDFS_MEM_RDFS_INF );
Если вам нужен другой аргумент или поддержка OWL, вы можете выбрать другую OntModelSpec
константу.Помните, что большие и / или сложные модели могут использоваться для медленных запросов.
Обновление (после редактирования исходного вопроса)
Чтобы рассуждать по двум моделям, вы хотитесоюз.Вы можете сделать это с помощью вспомогательной модели OntModel
.Я бы изменил ваш пример следующим образом (примечание: я не проверял этот код, но он должен работать):
String rdfFile = "... your RDF file location ...";
Model source = FileManager.get().loadModel( rdfFile );
String ontFile = "... your ontology file location ...";
Model ont = FileManager.get().loadModel( ontFile );
Model m = ModelFactory.createOntologyModel( OntModelSpec.RDFS_MEM_RDFS_INF, ont );
m.addSubModel( source );
String queryString =
"PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "
+ "PREFIX wn:<http://www.webkb.org/theKB_terms.rdf/wn#> "
+ "SELECT ?person "
+ "WHERE {"
+ " ?person rdf:type wn:Person . "
+ " }";
Query query = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(query, m);
ResultSet results = qe.execSelect();
ResultSetFormatter.out(System.out, results, query);
qe.close();