Algunos experimentos básicos con Protégé y Jena
May 31st, 2007Por fin estoy de vuelta. Hace casi mes y medio que no escribo nada en el blog, pero han sido por causas mayores, no es que me haya olvidado de él, así que no ha pasado a formar parte de esos millones de blogs abandonados que hay por Internet. Voy a aprovechar esta vuelta a la rutina semanal de escritura para recopilar una serie de cosas que he ido utilizando en los últimos meses, en la elaboración de algunos experimentos dentro de mi proyecto de doctorado relacionado con la Web Semántica. Posiblemente a mucha gente le suene a chino, aunque la verdad es que hay gente que usa esta serie de cosas. Si no estás al corriente de esta serie de cosas y tienes algo de curiosidad, puedes echar un vistazo a la introducción a la web semántica que escribí hace unos meses, o a este otro post algo más teórico sobre técnicas y lenguajes para la representación del conocimiento.
Entrando ya en materia, en este post resumo una serie de cosas que he utilizado para la creación y el manejo de Ontologías, mediante la utilización del entorno de desarrollo de ontologías Protégé y el marco de desarrollo para la Web Semántica Jena.
Exportar una ontología a almacenamiento persistente
En los experimentos que he realizado he utilizado Protégé para la creación de la ontología así como para las pruebas y la depuración, almacenando la información normalmente en un archivo de texto con la representación en OWL. Sin embargo para algunos de los experimentos he querido utilizar un almacenamiento persistente basado en base de datos, para lo cual es necesario exportar la información OWL del archivo de texto a un modelo relacional.
Para ello la mejor forma que he encontrado, teniendo en cuenta que el objetivo posterior era acceder a la información desde el propio Protégé o mediante Jena, es utilizar el plugin de Protégé Protege2Jena. Su instalación y funcionamiento es muy sencillo.
- Descargar el archivo de la página y descomprimirlo dentro de la carpeta plugins de Protégé.
- Ejecutar Protégé y abrir el proyecto OWL que queremos exportar a almacenamiento persistente
- Seleccionar
File >> Export to Format >> Jena Persistent Model
- Cumplimentar la información que se nos solicita en el formulario. En este caso se selecciona utilizar un almacenamiento en una base de datos MySQL se nombre PruebasOntology.

- Pulsar OK
Con esto ya habremos exportado el modelo a almacenamiento persistente y estará listo para ser utilizado desde Jena o desde el propio Protégé. Para conectarnos al modelo desde Protégé el funcionamiento es diferente al habitual mediante archivos OWL.
- Seleccionar
File >> Create new Project
- Seleccionar
OWL / RDF Database
y pulsarnext
- Seleccionar
Jena Persistente Model
y pulsarfinish
- Se nos muestra un diálogo como el de importación. Debemos cumplimentarlo con los datos de conexión a la base de datos y al modelo exportado y pulsar
Ok
.
Cargar una ontología con Jena
En este caso consideramos que tenemos una ontología almacenada en un archivo OWL. Con el siguiente código se puede cargar el modelo y empezar a trabajar con él mediante la api de Jena.
OntModel model = null;
// crear un modelo utilizando como razonador OWL_MEM_RULE_INF
model = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM_RULE_INF );
// abrir el archivo con la ontología
java.io.InputStream in = FileManager.get().open( "PruebaOntology.owl" );
if (in == null) {
throw new IllegalArgumentException("Archivo no encontrado");
}
// leer el archivo RDF/XML
model.read(in, "");
//
// El siguiente código muestra un listado con las clases e instancias existentes en el modelo
//
System.out.println( "Clases/Instancias");
System.out.println( "=================");
ExtendedIterator iteratorClasses = model.listClasses();
while ( iteratorClasses.hasNext() ){
OntClass ontClass = (OntClass) iteratorClasses.next();
System.out.println( ontClass );
ExtendedIterator iteratorInstances = ontClass.listInstances();
while ( iteratorInstances.hasNext() ){
System.out.println( "t"+iteratorInstances.next() );
}
System.out.println("");
}
Cargar una ontología con Jena desde almacenamiento persistente
Tras el anterior ejemplo, veamos como conectarnos a una ontología almacenada en el almacenamiento persistente del comienzo. Para ello
String strModel = "jdbc:mysql://myserver/PruebaOntology";
String strModelUser = "protege";
String strModelPwd = "";
ModelRDB model = null;
OntModel modelOnt = null;
String ns = "http://www.example.com/PruebasOntology.owl";
// Creo la conexión con el modelo persistente
IDBConnection conModel = new DBConnection(strModel, strModelUser, strModelPwd, "MySQL");
// abro el modelo desde el almacenamiento
ModelMaker maker = ModelFactory.createModelRDBMaker(conModel);
model = (ModelRDB)maker.openModel("PruebaOntology");
// creo el modelo utilizando como razonador OWL_MEM_RULE_INF, sobre el modelo abierto
modelOnt = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_RULE_INF, model);
//
// Como ejemplo de utilización obtengo todas los canciones del autor "Elvis Presley"
//
// obtengo la instacia del autor "Elvis Presley"
Individual autor = model.getIndividual( ns + "#Elvis_Presley" );
// obtengo la propiedad que relaciona las canciones con su autor
Property isAutorCancion = modelOnt.getProperty(ns+"#isAutorCancion");
// obtengo las canciones y las recorro
NodeIterator iteratorCanciones = autor.listPropertyValues(isAutorCancion);
while ( iteratorCanciones.hasNext() ) {
OntResource cancion = (OntResource)iteratorCanciones.next();
System.out.println(cancion);
}
Ejecutar una consulta SPARQL desde Jena
En los ejemplos anteriores hemos visto cómo cargar modelos con Jena y cómo utilizar de forma básica su api para acceder a la información representada. En esta ocasión vamos a ver cómo realizar consultas sparql sobre el modelo. Para ello cargamos el modelo y ejecutamos una consulta sparql con el mismo objetivo que en el ejemplo anterior, de obtener todas las canciones del autor “Elvis Presley”.
OntModel model = null;
String ns = "http://www.example.com/PruebasOntology.owl";
// crear un modelo utilizando como razonador OWL_MEM_RULE_INF
model = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM_RULE_INF );
// abrir el archivo con la ontología
java.io.InputStream in = FileManager.get().open( "PruebaOntology.owl" );
if (in == null) {
throw new IllegalArgumentException("Archivo no encontrado");
}
// leer el archivo RDF/XML
model.read(in, "");
//
// El siguiente código ejecuta una consulta sparql que
// devuelve todas las canciones cuyo autor es Elvis Presley
//
String queryString =
"PREFIX po: <http://www.example.com/PruebasOntology.owl#> "+
"SELECT ?cancion "+
"WHERE "+
"{ "+
" po:Elvis_Presley po:isAutorCancion ?cancion . "+
"}";
Query query = QueryFactory.create(queryString);
// Ejecutar la consulta y obtener los resultados
QueryExecution qe = QueryExecutionFactory.create(query, model);
try {
ResultSet results = qe.execSelect();
ResultSetFormatter.out(System.out, results, query) ;
} finally { qe.close() ; }
delicious
menéame
fresqui

June 1st, 2007 a las 2:30 pm
Ya se echaban de menos tus post tío !
Saludos
June 20th, 2007 a las 8:47 pm
Hola amigo es posible que me envies tu ontologia con la cual haces la explicacion de antemano te lo agradecieria mucho ya que si me urge saber como se hace esto
June 21st, 2007 a las 9:59 pm
Hola:
Estoy trabajando con recuperacion de informacion semantica, y encontre los ejemplos que tienes usando JENA y protége, me gustaria saber si es posible que me puedas enviar la ontologia con la cual trabajas en estos ejemplos.
Saludos: Gerardo
June 22nd, 2007 a las 12:37 am
Edgar, Gerardo, en http://swoogle.umbc.edu/ tenéis un buscador con el que podéis obtener multitud de ontologías de todo tipo sobre las que realizar pruebas.
June 22nd, 2007 a las 11:06 pm
Hola…
Estoy trabajando en un proyecto en el cual construyo una ontología en protégé-OWL y necesito conectarla a una base de datos siguiendo el modelo orientado a objetos, la bd está hecha en DB4O (Data Base for Objects)…
Agradecería mucho cualquier ayuda que me puedan prestar que sirva de guia para continuar con mi proyecto..
Saludos…
June 25th, 2007 a las 7:35 pm
Gracias amigo ya se de la existencia de swoogle y he hecho tengo mi propia ontologia que he desarrollado en Protege la peticion es relacionada con tu ejemplo ya que me gustaria probarlo con tu ontologia que usas para dichos ejemplos si me pudieras proporcionar la ontologia me seria de gran ayuda pero si no se puede de todos modos gracias =)
November 14th, 2007 a las 2:06 pm
Muy buen post! Te lo agradezco .
Saludos y haber si puedes poner más información sobre la WebSemántica!!
Muchas gracias.
November 15th, 2007 a las 2:48 pm
Hola,
Mi duda es la siguiente:
Estoy desarrollando un builtin para utilizarlo posteriormente en alguna regla en Protegé.
Este builtin debe de insertar un valor concreto en una determinada relación que corresponde a una instancia determinada.
Yo lo que hago es lo siguiente:
1º Me conecto a Base de datos MySQL
2º Cargo el fichero OWL en un modelo
3º efectuo la inserción utilizando para ello el modelo, es decir,con la
instrucción model.add(xxxxxx), es decir, utilizando el API de Jena
He comprobado y la nueva inserción se realiza correctamente en el modelo.
Es correcto esto? o debo de ejecutar un sentencia SPARQL como una “INSERT”
?
November 16th, 2007 a las 10:27 am
Hola Urtza, en efecto, puedes incorporar nueva información al modelo utilizando directamente la api de jena.
November 21st, 2007 a las 6:01 pm
Muchas gracias,
Me has resuelto una gran duda que tenía y muchos problemas
Un salu2
November 28th, 2007 a las 4:32 pm
Ante ayer dejé un comentario, pero se ve que no quedo. Cuando lo envié me dijo duplicado. De todos modos ya resolví lo que te consultaba. Quería configurar un Joseki para que tuviera inferencia con OWL dadas las restricciones para la clasficacion, y además reglas externas definidas. Hice un post al respecto en mi blog.
http://nacho.larrateguy.com.ar/2007/11/27/configurar-joseki-para-inferencia-en-un-modelo-owl-reglas/
Has trabajado con Jena y SWRL? Sabés si lo soporta? O se debería utilizar algún razonador entre medio que lo soporte?
Aún no busqué mucho acerca del tema, pero está interesante.
Saludos
November 28th, 2007 a las 9:42 pm
Ola, me gustaría saber si alguien de ustedes sabe algun sitio donde encontrar algun manual o libro acerca del Protégé (a poder ser en castellano)
January 31st, 2008 a las 6:03 pm
Que tal un gusto, mi pregunta es: que quiere decir con “almacenamiento persistente”, y ademàs para que utilizo Protege y Jena, porque segùn tengo entendido con los 2 programas se hacen ontologias, osea para que los 2.
Muchas Gracias
February 8th, 2008 a las 2:41 am
Jena es una API de JAVA con la que puedes programar. Hacer SPARQL,
hacer almacenamiento persistente, cargar en memória ontologías, editarlas via código JAVA,etc.
Protege viene a ser más un editor/creador de ontologías, luego tiene sus disstintos plugins para visualizar owl’s, hacer almacenamiento persistente tal como lo hace JENA,etc.
February 8th, 2008 a las 7:43 pm
Hola:
Estoy buscando ejemplos de ingeniería del conocimiento. Te escribo para saber si me puedes orientar.
Por tu atención, gracias.
Atte.
Guillermo
March 12th, 2008 a las 3:43 pm
Hola.
Soy nueva en esto de las consultas a las ontologóas por medio del SPARQL en JENA. He visto ya el ejemplo y lo he tratado de implementar en una consulta sencilla a mi ontología y aunque no me muestra ningún error, no me muestra resultados, es decir como si la consulta no encontrara nada…..
La consulta que quiero hacer es la siguiente:
Si tengo una Clase llamada Fire y quiero consultar todas sus subclases ¿Cómo iría la sintaxis de la consulta?…Espero me puedan ayudar…..Llevo ya dos días con lo mismo y no logro hacerlo funcionar…Muchas gracias
March 12th, 2008 a las 10:40 pm
Hola Clarissa,
Con la siguiente consulta puedes obtener todas las tripletas “clase subclasede clase”, utilizando rdfs:subClassOf
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?sc ?c
WHERE
{
?sc rdfs:subClassOf ?c
}
Si quieres obtener las subclases de una clase en concreto tendrías que sustituir ?c por la clase que desees.
March 27th, 2008 a las 12:35 am
hola amigo
Sabes estoy desarollando una ontologia en la cual tengo que realizar varias consultas a diferentes bases de datos, pero protege solo permite realizar consultas solo a una base de datos por el url de protege, pero estaba pensando en esta solucion, la cual consiste en crear un repositorio en el cual apunte el url de la ontologia, en este repositorio estaran las diferentes direcciones de las diferentes bases de datos en las cuales se van a realizar las consultas, la pregunta es se puede realizar lo que propongo, y como lo hago,
gracias por tu ayuda
March 27th, 2008 a las 5:18 pm
Hola fausto, protégé se conecta a la bbdd que se le indiqué y utiliza unas tablas con una disposición especial para almacenar las tripletas rdf. En el caso de que quisieras unir la información de varias bbdd quizás podrías sustituir estas tablas por vistas que se definan sobre el conjunto de bases de datos que necesitas, pero me parece que seguramente tendrás bastantes problemas. De todas formas no recuerdo la estructura de estas tablas, por lo que te recomendaría que lo probases, no pierdes nada.
March 27th, 2008 a las 8:48 pm
Hola!!! no has probado abrir ontologias en RDF con Protege, yo he tenido algunos problemas con eso y pense q podrias ayudarme.
Gracias de antemano
April 17th, 2008 a las 3:02 am
Ola a todos!
Tengo una preguntita, si yo quiero crear una clase Pais en Protege, seria Colombia un individuo o una subclase? o esto depende de cuanto quiera interiorizar en el concepto?
April 17th, 2008 a las 9:10 am
En efecto Andrea, podría crearla tanto como instancia o como clase. Dependerá de lo que estés modelando y de cómo quieras usarlo.
April 21st, 2008 a las 11:54 pm
hola amigo tengo una duda protege apunta solo a una url ejemplo http://www.owl-ontologies.com/Ontology1208811204.owl; pero aqui nace la duda cuando quiero acceder a varias bases de datos como lo hago, ya que segun la dir anterior solo puedo acceder a una base da datos, gracias
April 24th, 2008 a las 5:19 am
estoy haciendo una ontologia y me hace falta contar la cantidad de elementos de una clase y listarlos alguien , sabe como hacer eso.
June 3rd, 2008 a las 9:00 pm
Hola!!
Necesito instalar Jena 2.0 con Protégé, pero no he podido, me podrías explicar como hacerle?
Gracias!!!!
July 7th, 2008 a las 2:19 pm
Hola buenas, necesito razonar una ontologia owl en java.
-La ontologia owl la cree desde protege en un archivo.owl, esta tiene datos y reglas swrl.
-Quiero usar jena para poder mostrar las instancias que cumplan alguna regla swrl en particular.
¿Jena o jena 2 pueden razonar reglas swrl? ¿Hay alguna forma de conseguirlo?
Si alguien tiene idea porfavor necesito ayuda urgente. Mil gracias de antemano!
July 22nd, 2008 a las 1:35 am
HOLA, su publicacion me ha servido de mucha ayuda, estoy crendo una ontologia pero no me he podido conectar a la base de datos ya que cuando intento exportar el archivo.owl me aparece el siguiente error:java.lang.ClassNotFoundException: com.mysql.jdbc.Drive. Yo descarge este driver: http://dev.mysql.com/downloads/connector/j/5.1.html, pero aun asi no he podido conectarme, agradeceria mucho la ayuda que me pueda brindar. Gracias.
February 25th, 2009 a las 6:18 am
hola estoy trabajando con protege-owl version 4.0 y necesito el plugin SWRL para poder trabajar con el en esta version de software , quein lo tenga pude hacerme el favor de decirme donde lo puedo encontrar para descargarlo
May 6th, 2009 a las 3:41 am
Hola buenas, necesito razonar una ontologia owl en java.
-La ontologia owl la cree desde protege en un archivo.owl, esta tiene datos y reglas swrl.
-Quiero usar jena para poder mostrar las instancias que cumplan alguna regla swrl en particular.
¿Jena o jena 2 pueden razonar reglas swrl? ¿Hay alguna forma de conseguirlo?
Si alguien tiene idea porfavor necesito ayuda urgente. Mil gracias de antemano!
July 3rd, 2009 a las 5:21 am
Hola Estimados !,
en Agosto próximo comienzo mi proyecto de carrera sobre este tema, voy a usar Protégé 4, Java, Pellet y/o Jena. El proyecto consta de hacer un validador de soluciones de Help Desk, es decir parto de una lista de soluciones y las tengo que validar con una ontología de un conocimiento (ej. reparación de pc).
Mi duda es la siguiente, como me viene la solución ya escrita, ¿cómo hago para llevar esa solución a Protégé y validarla con los axiomas de la antologia?, ¿cómo creo una instancia para validación y luego responder?.
saludos a todos,
Alejandro.