我正在使用Jena SPARQL API,我想在应用推理规则后对我的RDF文件执行查询。我创建了一个包含我所有规则的.rul
文件;现在我想运行这些规则并执行我的查询。当我使用OWL时,我继续这样做:
OntModel model1 = ModelFactory.createOntologyModel( OntModelSpec..OWL_MEM_MICRO_RULE_INF);
// read the RDF/XML file
model1.read( "./files/ontology.owl", "RDF/XML" );
model1.read( "./files/data.rdf", "RDF/XML" );
// Create a new query
String queryString =
".....my query";
Query query = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(query, model1);
ResultSet results = qe.execSelect();
ResultSetFormatter.out(System.out, results, query);
我想用推理规则做同样的事情,即加载我的.rul
文件,如下所示:
model1.read( "./files/rules.rul", "RDF/XML" );
这不适用于.rul
个文件,规则不会执行。有关如何加载.rul
文件的任何想法?提前谢谢。
答案 0 :(得分:1)
Jena规则不是RDF,您不会将它们读入模型。
RDFS是RDF,它是使用规则在内部实现的。
构建推理模型:
Model baseData = ...
List<Rule> rules = Rule.rulesFromURL("file:YourRulesFile") ;
Reasoner reasoner = new GenericRuleReasoner(rules);
Model infModel = ModelFactory.createInfModel(reasoner, baseData) ;
有关直接构建模型的其他方法(例如,RDFS推断),请参阅ModelFactory
。