Nach der Ontologie-API in Vorheriger Artikel ist dies eine Erklärung der Inferenz-API. Jena zeichnet sich durch die Handhabung von Modellen durch die Ontology API und die Bereitstellung von Inference, Reasoning in separaten Modulen aus. Die Gründe, die von Jena gehandhabt werden können, sind folgende. Davon abgesehen ist Pellet berühmt und wurde in Zeitungen vorgestellt, aber es scheint, dass es von Stardogs Produkten absorbiert wurde.
rdfs: subPropertyOf
und rdfs: subClassOf
.Reasoner Es ist eine Komponente namens Reasoner, die die Schlussfolgerungen zieht. Der grundlegende Ablauf besteht darin, die Argumentation mithilfe des Argumentationsmodells (InfModel) unter Verwendung von Reasoner zu betreiben.
Reasoner werden normalerweise über Factory-Methoden generiert. Es scheint einen vorbereiteten Reasoner zu geben, aber wenn Sie die Ontology-API verwenden, scheint die vorgenerierte OntModelSpec zum entsprechenden Reasoner zu passen. Wenn Sie beispielsweise mit RDFS auf ein einfaches RDF-Modell schließen, wird "ModelFactory.createRDFSModel" verwendet. Es sieht wie folgt aus.
String NS = "urn:x-hp-jena:eg/";
//Machen Sie ein geeignetes Modell
Model rdfsExample = ModelFactory.createDefaultModel();
Property p = rdfsExample.createProperty(NS, "p");
Property q = rdfsExample.createProperty(NS, "q");
rdfsExample.add(p, org.apache.jena.vocabulary.RDFS.subPropertyOf, q);
rdfsExample.createResource(NS+"a").addProperty(p, "foo");
//InfModel von Reasoner mit RDFS
InfModel inf = ModelFactory.createRDFSModel(rdfsExample);
Oben ist das Prädikat "rdfs: subPropertyOf" in der Eigenschaft p beschrieben, und das Ziel ist q. Dann funktioniert die Inferenz und Sie können den Inhalt von p (dh foo
) erhalten, indem Sie auf die Eigenschaft q verweisen.
Resource a = inf.getResource(NS+"a");
System.out.println("Statement: " + a.getProperty(q));
Wenn Sie im Voraus verschiedene Einstellungen für Reasoner vornehmen möchten, können Sie zusätzlich zu der oben beschriebenen Methode auch InfModel erstellen, indem Sie Reasoner wie folgt teilen.
Reasoner reasoner = RDFSRuleReasonerFactory.theInstance().create(null);
InfModel inf = ModelFactory.createInfModel(reasoner, rdfsExample);
The RDFS Reasoner(RDFSRuleReasoner) Ein in Jena standardmäßig enthaltener Inferencer, der RDFS unterstützt. Es gibt drei Konformitätsstufen, die zum Zeitpunkt der Einstellung festgelegt werden können. Im folgenden Beispiel wird es durch "ReasonerVocabulary.PROPsetRDFSLevel" angegeben.
Resource config = ModelFactory.createDefaultModel()
.createResource()
.addProperty(ReasonerVocabulary.PROPsetRDFSLevel, "simple");
Reasoner reasoner = RDFSRuleReasonerFactory.theInstance()Create(config);
The OWL Reasoner Jena bietet eine Implementierung von OWL / Lite, einer Teilmenge von OWL / full. Derzeit können in den Einstellungen zwei Modi festgelegt werden: Standard und Schneller / Kleiner. Ich strebe keine vollständige Implementierung von OWL / Full an, daher habe ich nach einer anderen Engine wie Pellet, Racer, FaCT, gefragt. Ding. Die Verwendung ist wie folgt. Ich lese die in OWL beschriebene Ontologie (Schema), binde sie an den Reasoner und erstelle dann das InfModel.
Model schema = FileManager.get().loadModel("file:data/owlDemoSchema.owl");
Model data = FileManager.get().loadModel("file:data/owlDemoData.rdf");
Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
reasoner = reasoner.bindSchema(schema);
InfModel infmodel = ModelFactory.createInfModel(reasoner, data);
Das ist alles für heute. Mit so vielen Informationen frage ich mich, ob ich eine App erstellen kann, die Ontologie-Inferenz verwendet ...
Recommended Posts