[JAVA] Informationen zur Apache Jena Ontology API

Verwenden von Ontroji mit Apache Jena

Apache Jena ist neben RDF4J eine beliebte RDF-Bibliothek. Nach einer Theorie kann Jena mehr, aber das Lernen ist schwieriger.

Tatsächlich ist es ziemlich einfach, ein RDF normal zu erstellen, aber ich habe das Gefühl, dass die Hürde plötzlich steigt, wenn man versucht, mit Ontroge wie OWL umzugehen.

Apache Jena bietet eine konsistente API für den Umgang mit RDFS, OWL usw. Es scheint, dass es hier nur wenige japanische Quellen gibt, daher werde ich hier eine Notiz hinterlassen.

Grundlagen der Ontologie-API

OWL ist wie eine Obermenge von RDFS (RDF-Schema), und was durch RDFS dargestellt werden kann, kann grob ausgedrückt werden. Beispielsweise können RDF-Eigenschaften hierarchisch dargestellt werden, OWL-Eigenschaften können jedoch auf transient, semantrisch und funktional erweitert werden. Sie können auch wechselseitige (umgekehrte) Beziehungen beschreiben.

Übrigens gibt es zwei Arten von OWL: OWL DL, das auf beschreibender Logik basiert und eine strikte Typunterscheidung aufweist, und OWL Full, das für die praktische Ontologiekonstruktion ausgelegt ist. Es bietet auch OWL Lite, eine Teilmenge von OWL DL, die einfacher zu implementieren ist.

Der Vorteil von Ontroge besteht darin, dass Sie mit Reasoner Rückschlüsse auf Ihre Daten ziehen können. Mit der Inferenz-API kann Jena eine Vielzahl von Inferenz-Engines nutzen.

OntClass ist die Basisklasse, und in dieser Klasse können verschiedene Schemas (Profile) ausgedrückt werden. Diese Klasse ist eine Erweiterung der Model-Klasse von Jena und definiert die im ontroge angegebenen Einschränkungen (Konstrukt). Insbesondere wird es über die Factory-Methode wie unten gezeigt generiert.

OntModel m = ModelFactory.createOntologyModel();

In diesem Fall wird es mit den Standardeinstellungen (OWL-Full, In-Memory, RDFS-Inferenz) generiert. Im Allgemeinen ist die Last schwer, daher sollten Sie die entsprechenden Einstellungen verwenden. Geben Sie in diesem Fall OntModelSpec als Argument ein. Es sieht wie folgt aus. Mit diesem Argument wird auch das zu verwendende Sprachprofil (OWL Full, OWL DL, OWL Lite, RDFS) festgelegt. Es gibt 16 Profile. Weitere Informationen finden Sie unter API-Dokument.

OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM);

Wenn Sie in Jenas Ontologiemodell versuchen, mehrere Ontlogien zu verarbeiten, müssen Sie eine Sammlung von Modellen importieren. Verwenden Sie beim Importieren der Ontologie genau wie bei Jana im Allgemeinen die Methode "Lesen".

read( String url )
read( Reader reader, String base )
read( InputStream reader, String base )
read( String url, String lang )
read( Reader reader, String base, String Lang )
read( InputStream reader, String base, String Lang )

Beim Laden des ontroge enthält es standardmäßig einen eigenen Referenz-URI. Insbesondere ist dies der durch "rdf: about" angegebene URI. Im Beispiel der offiziellen Website wird es wie folgt vorgestellt. Der Ontroge, auf den verwiesen / geladen wird, wird von "owl: import" angezeigt. Ist dc Dublin Core?

<owl:Ontology rdf:about="">
  <dc:creator rdf:value="Ian Dickinson" />
  <owl:imports rdf:resource="http://jena.apache.org/examples/example-ont" />
</owl:Ontology>

Die auf diese Weise geladene Ontologie wird als separate Diagrammstruktur beibehalten. Wenn mehr als eine geladen ist, wird sie als Union Graph integriert und von Reasoner referenziert.

Es gibt verschiedene Optionen wie die RDF-Persistenz, die diese Ontroges verwenden. Die folgenden Beispiele werden auf der offiziellen Website vorgestellt. OntDocumentManager ist ein Modul, das die Verarbeitung der Ontologie unterstützt und dort die Methode addAltEntry aufruft. Es wird beschrieben, dass der durch Surfen im Internet erhaltene ESWC-Ontroge in das lokale RDF kopiert und verarbeitet wird. Es ist schwer, sich an alles zu erinnern. .. ..

OntModel m = ModelFactory.createOntologyModel();
OntDocumentManager dm = m.getDocumentManager();
dm.addAltEntry( "http://www.eswc2006.org/technologies/ontology",
                "file:" + JENA + "src/examples/resources/eswc-2006-09-21.rdf" );
m.read( "http://www.eswc2006.org/technologies/ontology" );

Übe an der Scala

Es scheint banana-rdf nativ in scala implementiert zu sein, aber da die Dokumentation nicht vollständig ist, ist Jena in scala. Ich würde es gerne einwickeln und benutzen.

Dieses Mal werde ich die Prozedur mit Ammonite-REPL schreiben.

//Laden Sie Jena herunter
import $ivy.`org.apache.jena:jena-core:3.8.0`

import scala.collection.JavaConverters._
import org.apache.jena.rdf.model._
import org.apache.jena.ontology.OntModelSpec._

//Basismodell generieren
val SOURCE = " http://rdfs.org/sioc/ns"
val NS = SOURCE  + "#"
val base = ModelFactory.createOntologyModel(OWL_MEM)
base.read(SOURCE, "RDF/XML")

//Inferenzmodell für Basismodell generieren
val inf = ModelFactory.createOntologyModel(OWL_MEM_MICRO_RULE_INF, base)

val user = base.getOntClass(NS + "UserAccont")
val u1 = base.createIndividual(NS + "user1", user)
u1.listRDFTypes(true).toList.asScala.foreach{`type` => println( c1.getURI() + " is asserted in class " + `type`}
// http://rdfs.org/sioc/ns#account1 is asserted in class http://rdfs.org/sioc/ns#UserAccount
 
val inf_user = inf.getIndividual(NS + "user1")
inf_user.listRDFTypes(true).toList.asScala.foreach{`type` => println( inf_user.getURI() + " is asserted in class " + `type`}
// http://rdfs.org/sioc/ns#account1 is asserted in class http://rdfs.org/sioc/ns#UserAccount 
// http://rdfs.org/sioc/ns#account1 is asserted in class http://rdfs.org/sioc/ns#User

Nehmen Sie zuerst den ontroge im Web auf und laden Sie ihn. Lesen Sie als Nächstes die Ontologieklasse zum Erstellen von Individual (den Teil von getOntClass) und generieren Sie sie mit createIndividual. Der letzte Teil wird unter Verwendung der generierten individuellen URI abgeleitet. Das logische Wertargument von listRDFTypes gibt an, ob auf die Klasse direkt verwiesen wird (Direct). In der im Kommentarteil oben geschriebenen Ausgabe werden zwei Klassen angezeigt. Wenn Sie jedoch das Argument auf false setzen, können Sie die folgende Ausgabe erhalten. Irgendwie kann man die Bedeutung verstehen.

http://rdfs.org/sioc/ns#account1 is asserted in class http://rdfs.org/sioc/ns#UserAccount
http://rdfs.org/sioc/ns#account1 is asserted in class http://rdfs.org/sioc/ns#User
http://rdfs.org/sioc/ns#account1 is asserted in class http://www.w3.org/2002/07/owl#Thing
http://rdfs.org/sioc/ns#account1 is asserted in class http://www.w3.org/2000/01/rdf-schema#Resource
http://rdfs.org/sioc/ns#account1 is asserted in class http://xmlns.com/foaf/0.1/OnlineAccount

Es gibt viele andere Dinge, an die Sie sich erinnern sollten, z. B. Eigenschaftsbeschreibungen und Beschreibungen von Einschränkungsbedingungen. In jedem Fall stellt sich heraus, dass die Ontorogy-API verschiedene Schlussfolgerungen unter Verwendung der vorhandenen Ontologie ermöglicht.

Das ist alles für heute.

Recommended Posts

Informationen zur Apache Jena Ontology API
Informationen zur Apache Inference API
Kauen Sie über API
Sprechen Sie über das Hochladen von Dateien mithilfe der Slack-API mit Apache HttpPost
Über Gradles Kompilierung, API, Implementierung usw.