Verificación de consistencia utilizando un razonador ermitaño en Python para una ontología

Estoy usando Owlready2 api para Python para cargar una ontología y verificar la consistencia de esa ontología usando la función sync_reasoner () . Pero parece que no está comprobando la consistencia de la ontología. Aunque hay un error, no muestra nada! Cualquier idea de cómo puedo verificar la consistencia de una ontología en python usando owlready2 o cualquier otra api.

Aquí está mi pequeño código:

from owlready2 import * onto = get_ontology("test.owl") sync_reasoner() 

Y aquí está la salida que estoy recibiendo:

  • Owlready2 * Ejecutando HermiT … java -Xmx2000M -cp C: \ Users \ 44999038 \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ owlready2 \ hermit; C: \ Users \ 44999038 \ AppData \ Local \ Programs \ Python \ Python36-32 \ lib \ site-packages \ owlready2 \ hermit \ HermiT.jar org.semanticweb.HermiT.cli.CommandLine -c -O -D -I archivo: /// C: / Users / 44999038 / AppData / Local / Temp / tmptmcc_a79
  • Owlready2 * HermiT tomó 0.48622655868530273 segundos

Ontología: introduzca la descripción de la imagen aquí

Mi código modificado:

 from owlready2 import * onto = get_ontology("test.owl") with onto:sync_reasoner() onto.save() 

Salida del archivo Owl que tengo:

introduzca la descripción de la imagen aquí

La salida que está mostrando es simplemente la salida de OWLReady llamando al razonador HermiT desde la línea de comandos. Por lo tanto, la razón por la cual la “salida” es la misma independientemente de cuál sea.

Lo que necesitas son los resultados de la inferencia después de la clasificación. De acuerdo con la documentación , puede dirigir las inferencias a un archivo u obtener los resultados de sus clases como se muestra en este ejemplo .

Lo que no es obvio es cómo determinar si la ontología es inconsistente o no. Lo mejor que puedo encontrar es que necesita buscar en los resultados de la inferencia y si puede encontrar una clase que sea equivalente a owl:Nothing , su ontología es inconsistente.

Básicamente me faltaban dos cosas importantes.

  1. He puesto on.save () en lugar de onto.save ( “test_t1.owl” ). A pesar de que está bien, solo se puede colocar en .save () pero en.save ( “test_t1.owl” ) guarda la salida en un archivo diferente.

  2. Me faltaba la función load () al mencionar la ontología de origen en = get_ontology (“ruta de archivo”). load () Esta ruta del archivo podría ser una URL como ” https://protege.stanford.edu/ontologies/pizza/pizza.owl ” o una ruta del directorio local “C: \ User \ Desktop \ test.owl”

Mi código de trabajo se da a continuación:

 from owlready2 import * import owlready2 #owlready2.JAVE_EXE="C:\\Program Files\\Java\\jdk1.8.0_144\\bin\\java.exe" onto_path.append("C:\\User\\Desktop") onto = get_ontology("test.owl").load() #inferred_onto = get_ontology("http://test.org/my_inferrences.owl";) with onto: sync_reasoner() onto.save("test_t1.owl") 

Archivo de salida