[JAVA] Informationen zur Apache Inference API

Einführung

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.

  1. ** Transitive Reasoner **: Akzeptiere nur Transive / Reflexive Eigenschaften. Insbesondere rdfs: subPropertyOf und rdfs: subClassOf.
  2. ** RDFS-Regel-Reasoner **: Eine konfigurierbare Teilmenge, die RDFS enthält.
  3. ** OWL, OWL Mini, OWL Micro Reasoners **: Wie der Name schon sagt. Zum Beispiel eine Teilmenge von OWL.
  4. ** Generic Rule Reasoner **: Ein regelbasierter Reasoner, den Benutzer selbst implementieren können. Ich benutze es normalerweise nicht.

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);

Verschiedene Reasoner

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);
  1. ** Voll **: Beinhaltet alle Agenaries, Regeln usw.
  2. ** Standard **: Schließt Hochlastprüfungen aus. Ich bin mir nicht sicher, aber es scheint, dass es keine zwei Regeln gibt: "Alles ist eine Ressource" und "Alles, was als Eigenschaft verwendet wird, ist eine" (rdf1, rdfs4a, rdfs4b), und es scheint im praktischen Gebrauch fast kein Problem zu geben.
  3. ** Einfach **: Enthält nur Übergangsbeziehungen wie subPropertyOf und subClassOf sowie Bereichsbeschreibungen wie domain und range und keine Axiome. Es scheint am bequemsten zu sein, ist jedoch aufgrund unvollständiger Implementierung nicht die Standardeinstellung.

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 ...

Referenz

Recommended Posts

Informationen zur Apache Inference API
Informationen zur Apache Jena Ontology API
Kauen Sie über API
Sprechen Sie über das Hochladen von Dateien mithilfe der Slack-API mit Apache HttpPost
[Einführung in Java] Informationen zur Stream-API
Über Gradles Kompilierung, API, Implementierung usw.
Über =
[Java Siler] Informationen zur Typinferenz von var
Erstellen Sie eine REST-API mit Apache2 + Passenger + Sinatra.