jena派生是否支持RDFS推理机?
我看到jena的文件说jena支持派生。但是,我的代码无法派生。 这是我的代码:jena派生是否支持RDFS推理机?,jena,inference,Jena,Inference,我看到jena的文件说jena支持派生。但是,我的代码无法派生。 这是我的代码: import org.apache.jena.rdf.model.*; import org.apache.jena.reasoner.Derivation; import org.apache.jena.reasoner.ValidityReport; import org.apache.jena.reasoner.rulesys.RuleDerivation; import org.apache.jena.ut
import org.apache.jena.rdf.model.*;
import org.apache.jena.reasoner.Derivation;
import org.apache.jena.reasoner.ValidityReport;
import org.apache.jena.reasoner.rulesys.RuleDerivation;
import org.apache.jena.util.FileManager;
import org.apache.jena.vocabulary.*;
import java.io.*;
import java.util.Iterator;
public class Qi2 extends Object {
private static String fnameschema = "./data/Qischeme.rdf";
private static String fnameinstance = "./data/QiData.rdf";
public static void main (String args[]) {
// create an empty model
Model schema = FileManager.get().loadModel(fnameschema);
Model data = FileManager.get().loadModel(fnameinstance);
InfModel infmodel = ModelFactory.createRDFSModel(schema, data);
int k = 0;
final PrintWriter out = new PrintWriter(System.out);
Resource wilson = infmodel.getResource("http://www.example.org/ustb#Wilson_Harvey");
Resource person = infmodel.getResource("http://www.example.org/ustb#Person");
for (StmtIterator i = infmodel.listStatements(wilson, (Property) null, person); i.hasNext(); ) {
Statement s = i.nextStatement();
System.out.println(s);
final Iterator<Derivation> derivations = infmodel.getDerivation(s);
assert( null != derivations );
if (derivations.hasNext())
System.out.println("have vaule");
k++;
}
System.out.println(k);
}
}
import org.apache.jena.rdf.model.*;
导入org.apache.jena.reasoner.Derivation;
导入org.apache.jena.reasoner.ValidityReport;
导入org.apache.jena.reasoner.rulesys.RuleDerivation;
导入org.apache.jena.util.FileManager;
导入org.apache.jena.词汇表。*;
导入java.io.*;
导入java.util.Iterator;
公共类Qi2扩展了对象{
私有静态字符串fnameschema=“./data/Qischeme.rdf”;
私有静态字符串fnameinstance=“./data/QiData.rdf”;
公共静态void main(字符串参数[]){
//创建一个空模型
modelschema=FileManager.get().loadModel(fnameschema);
模型数据=FileManager.get().loadModel(fnameinstance);
InfModel InfModel=ModelFactory.createRDFSModel(模式,数据);
int k=0;
最终打印输出=新打印输出(System.out);
Resource wilson=infmodel.getResource(“http://www.example.org/ustb#Wilson_Harvey");
Resource person=infmodel.getResource(“http://www.example.org/ustb#Person");
for(StmtIterator i=infmodel.listStatements(wilson,(Property)null,person);i.hasNext();){
语句s=i.nextStatement();
系统输出打印项次;
最终迭代器派生=infmodel.getDerivation(s);
断言(null!=派生);
if(派生.hasNext())
System.out.println(“have vaule”);
k++;
}
系统输出println(k);
}
}
代码永远无法输入if(derivations.hasNext())部分。我想知道jena是否支持RDFS reasoner getDerivation?您必须将reasoner的
PROPderivationLogging
参数设置为true
,具体操作如下:
Model schema = FileManager.get().loadModel(dataFile);
Model data = FileManager.get().loadModel(schemaFile);
Resource config = ModelFactory.createDefaultModel()
.createResource()
.addProperty(ReasonerVocabulary.PROPderivationLogging, "true");
Reasoner reasoner = RDFSRuleReasonerFactory.theInstance().create(config);
InfModel infModel = ModelFactory.createInfModel(reasoner, schema, data);