[JAVA] À propos de l'API d'ontologie Apache Jena

Utilisation d'Ontroji avec Apache Jena

Apache Jena est une bibliothèque RDF populaire aux côtés de RDF4J. Selon une théorie, Jena peut faire plus, mais l'apprentissage est plus difficile.

En fait, il est assez facile de créer un RDF normalement, mais je sens que l'obstacle se lève soudainement lorsque l'on essaie de gérer un ontroge tel que OWL.

Apache Jena fournit une API cohérente pour gérer RDFS, OWL, etc. Il semble qu'il y ait peu de sources japonaises ici, je vais donc laisser une note ici.

Principes de base de l'API Ontology

OWL est comme un sur-ensemble de RDFS (schéma RDF), et vous pouvez exprimer grossièrement ce qui peut être représenté par RDFS. Par exemple, les propriétés RDF peuvent être représentées hiérarchiquement, mais les propriétés OWL peuvent être étendues aux propriétés transitoires, sémantriques et fonctionnelles. Vous pouvez également décrire des relations réciproques (inverses).

À propos, OWL inclut OWL DL, qui est basé sur une logique descriptive et a une distinction de type stricte, et OWL Full, qui est conçu pour la construction d'ontologie pratique. Il fournit également OWL Lite, un sous-ensemble de OWL DL plus facile à implémenter.

L'avantage d'utiliser Ontroge est que vous pouvez utiliser Reasoner pour faire des inférences sur vos données. L'API d'inférence permet à Jena de tirer parti d'une variété de moteurs d'inférence.

OntClass est la classe de base, et divers schémas (profils) peuvent être exprimés dans cette classe. Cette classe est une extension de la classe Model de Jena et définit les contraintes (construction) spécifiées dans l'ontroge. Plus précisément, il est généré via la méthode Factory comme indiqué ci-dessous.

OntModel m = ModelFactory.createOntologyModel();

Dans ce cas, il est généré avec les paramètres par défaut (OWL-Full, In-Memory, inférence RDFS). Généralement, la charge est lourde, vous devez donc utiliser les paramètres appropriés. Dans ce cas, entrez OntModelSpec comme argument. Cela ressemble à ce qui suit. Le profil de langue (OWL Full, OWL DL, OWL Lite, RDFS) à utiliser est également défini avec cet argument. Il y a 16 profils. Plus précisément, veuillez vous référer au Document API.

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

Dans le modèle d'ontologie de Jena, lorsque vous essayez de gérer plusieurs ontlogies, vous aurez une collection de modèles à importer. Tout comme l'utilisation de Jana en général, utilisez la méthode read lors de l'importation de l'ontologie.

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 )

Lors du chargement de l'ontroge, il inclut son propre URI de référence par défaut. Plus précisément, il s'agit de l'URI spécifié par rdf: about. Dans l'exemple du site officiel, il est présenté comme suit. ʻOwl: importmontre l'ontroge qui est référencé / chargé. Est-ce quedc` 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>

L'ontologie ainsi chargée est conservée sous la forme d'une structure de graphe distincte. Si plus d'un est chargé, il sera intégré en tant que Union Graph et référencé par Reasoner.

Il existe diverses options telles que la persistance RDF utilisant ces ontologies. Les exemples suivants sont présentés sur le site officiel. ʻOntDocumentManager est un module qui assiste le traitement de l'ontologie, et y appelle la méthode ʻaddAltEntry. Il est décrit que l'ESWC ontroge obtenu en naviguant sur Internet est copié dans le RDF local et traité. Il est difficile de se souvenir de tout. .. ..

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

Pratique à Scala

Il semble y avoir banana-rdf nativement implémenté dans scala dans le monde, mais comme la documentation n'est pas complète, Jena est dans scala. J'aimerais l'envelopper et l'utiliser.

Cette fois, j'écrirai la procédure avec Ammonite-REPL.

//Télécharger Jena
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._

//Générer un modèle de base
val SOURCE = " http://rdfs.org/sioc/ns"
val NS = SOURCE  + "#"
val base = ModelFactory.createOntologyModel(OWL_MEM)
base.read(SOURCE, "RDF/XML")

//Générer un modèle d'inférence par modèle de base
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

Tout d'abord, récupérez l'ontroge sur le Web et chargez-le. Ensuite, référez-vous à la classe d'ontologie pour créer Individual (la partie de getOntClass) et générez-la avec createIndividual. La dernière partie est déduite à l'aide de l'URI individuel généré. L'argument de valeur logique de listRDFTypes indique si la classe est directement référencée (Direct). Dans la sortie écrite dans la partie commentaire ci-dessus, deux classes sont affichées, mais si vous définissez l'argument sur false, vous pouvez obtenir la sortie suivante. D'une manière ou d'une autre, vous pouvez comprendre le sens.

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

Il y a beaucoup d'autres choses à retenir, telles que les descriptions de propriétés et les descriptions de conditions de contrainte. Dans tous les cas, il s'avère que l'API Ontorogy permet diverses inférences en utilisant l'ontologie existante.

C'est tout pour aujourd'hui.

Recommended Posts

À propos de l'API d'ontologie Apache Jena
À propos de l'API Apache Inference
Mâchez l'API
Parlez du téléchargement de fichiers à l'aide de l'API Slack avec Apache HttpPost
À propos de la compilation, de l'API, de l'implémentation, etc. de Gradle