Skip to content

Compilar la API de ProtegeOWL 3.x Partiendo de los Fuentes

26 abril 2011

Hace algún tiempo, publiqué una entrada en la que os mostraba como instalar la API de Protégé para gestionar ontologías desde vuestros programas en Java mediante el IDE Eclipse. Resumiendo, el método consistía en importar todo el código fuente de Protégé (todos los .java y las librerías .jar) a vuestro proyecto y dejar que Eclipse compilara todo. Este método tiene una gran ventaja y es que si queremos realizar cambios en cualquiera de las clases de Protégé, podemos hacerlo directamente. Además, en las trazas que realicemos a nuestro programa podemos observar cómo la JVM va recorriendo cada clase de Protegé y entender un poco más a fondo su funcionamiento.

El problema de este método es el tamaño que ocupa el código fuente de Protégé, que hará crecer nuestro proyecto de manera considerable. Estamos hablando de aproximadamente unos 40 Megas repartidos entre Protege-Core y ProtegeOWL y todo ello en ficheros .java y .jar. Imaginad también el trabajo que le va a costar a Eclipse compilar el proyecto cada vez que sea necesario.

Para evitar tener que importar todo este código fuente y aligerar los proyectos Java, en esta entrada os presento un método alternativo que nos va a permitir reducir esos 40 megas a 8-9 Megas y sobre todo reducir la enorme cantidad de clases Java a sólo tres ficheros JAR. El método es muy sencillo y consiste principalmente en compilar el código fuente de Protégé antes de incluirlo en nuestro proyecto, de manera que lo que vamos a incluir en dicho proyecto serán simplemente los ficheros .jar que hemos obtenido tras la compilación. Este proceso de compilar el código fuente es muy muy secillo ya que tenemos disponibles los scripts Ant que harán todo el trabajo sucio; por tanto el primer paso fundamental será comprobar si  tenemos instalado Apache Ant. Veamos los pasos que debemos seguir para compilar el código fuente y obtener nuestras librerías:

  1. Descargar el código fuente de Protege-Core
  2. Descargar el código fuente de ProtegeOWL
  3. Descomprimir y compilar el código fuente de Protege-Core
  4. Descomprimir y compilar el código fuente de ProtegeOWL. (Necesitaremos los ficheros .jar que obtendremos tras compilar el código fuente de Protege-Core)
El objetivo será obtener los siguientes ficheros .jar:
  • protege.jar
  • looks.jar (viene incluido y ya compilado en el código fuente de Protege-Core)
  • protege-owl.jar

1. y 2. Descargar código fuente

Vamos a descargar la versión 3.x de Protégé. Para ello simplemente vamos a la página de descarga de Protégé y descargamos los dos ficheros ZIP que contendrán el código fuente de Protégé: “Core Protégé and Protégé-Frames” y “Protege-OWL“. Una vez que tengamos los dos ficheros ZIP, ya podemos pasar al paso 3 para Compilar Protege-Core.

3. Descomprimir y compilar el código fuente de Protege-Core

El código fuente de Protégé-Core viene en un fichero ZIP que se nombra de la siguiente manera: protege-src-3.x.y.zip. (La ‘x’ y la ‘y’ dependerán de la versión que hayáis descargado, lo habitual será descargar la última estable disponible). Descomprimimos este fichero ZIP y comprobamos que dentro de la carpeta que acabamos de descomprimir tenemos un fichero llamado “build.xml” y la librería ‘looks.jar’, que debe estar dentro de la carpeta lib/. Lo normal es que la librería looks.jar, tenga en el nombre la versión actual de la propia librería, por ejemplo “looks-2.1.3.jar”, debemos renombrarla para que sea: looks.jar.

Antes de comenzar acompilar todo el código fuente, debemos asegurarnos de tener bien definida la variable de entorno JAVA_HOME, ya que si está bien definida no tendremos que configurar nada dentro del script Ant.

Una vez tenemos todo preparado, vamos a compilar Protege-Core: Para ello necesitamos abrir una consola y desde línea de comandos navegar hasta el directorio que acabamos de descomprimir (Mediante el comando cd ya sabéis). Una vez ahí, simplemente ejecutamos: ant

Automáticamente se empezará a compilar todo el código fuente y cuando el comando termine de ejecutarse, se habrán generado todos los ficheros .class correspondientes a cada clase .java y se habrán generado los ficheros .jar necesarios. La librería que nos interesa: protege.jar, se crea dentro del directorio dist/

Si necesitáis más detalles del proceso Ant que acabamos de ejecutar, os animo a echar un vistazo a un pequeño tutorial que han preparado los chicos de Stanford: Compiling with Ant

Pasemos al paso número 4 para Descomprimir y Compilar ProtegeOWL, tened a mano las librerías protege.jar y looks.jar ya que ProtegeOWL depende de ellas y, por tanto, son necesarias para poder compilar.

4. Descomprimir y compilar el código fuente de ProtegeOWL

En esta ocasión el código fuente de ProtégéOWL viene en un fichero ZIP que se nombra de la siguiente manera: protege-owl-src-3.x.y.zip. (La ‘x’ y la ‘y’ dependerán de la versión que hayáis descargado).

Descomprimimos este fichero ZIP y antes de hacer nada, copiamos protege.jar y looks.jar a la carpeta que acabamos de descomprimir, tal cual, en la raíz de dicha carpeta.

Una vez copiadas las librerías podemos compilar el código fuente :). Para ello, desde línea de comandos, navegamos hasta la carpeta que acabamos de descomprimir para ProtegeOWL y ejecutamos el siguiente comando: ant plugin.dir

En este punto, debería compilarnos el código fuente de ProtegeOWL sin problemas, aunque a mí personalmente sí que me dio ciertos problemas, más concretamente este era el error que me daba:

checkProtegeLibsAndReport:
     [echo] Missing protege libraries.  You can either
     [echo] set the PROTEGE_HOME environment variable to a
     [echo] protege installation directory where the
     [echo] appropriate plugins have been installed or copy the
     [echo] needed jars into the lib directory
     [echo] Use the -v option to find the missing jar

Os cuento cómo lo solucioné para que no os quebréis mucho la cabeza si al ejecutar el comando obteneis un error de compilación como este. El error que aparece arriba tiene que ver con una variable de entorno (env.PROTEGE_HOME) que al parecer no estaba definida o que el propio script no era capaz de obtener su valor y por tanto no era capaz de encontrar las rutas necesarias. (Es un error un poco extraño, ya que el script que hemos utilizado antes para compilar Protege-Core, hace uso de esta variable y compila perfectamente). La solución era muy sencilla: Vale, no eres capaz de darle valor a esa variable…pues se lo doy yo manualmente :). Simplemente edité el script build.xml y modifiqué la línea 11.

La línea 11 es así: <property name=“protege.home” value=“${env.PROTEGE_HOME}”/>

Simplemente modifiqué el valor que tiene el atributo value= , y puse la ruta completa de la carpeta que acababa de descomprimir y que contiene el código fuente de ProtegeOWL, algo así:

<property name=“protege.home” value=“/Users/Rekeb/Desktop/Protege-OWL 3.4.5”/>

Listo, una vez definida la propiedad ‘protege.home‘ el resto del script compiló sin problemas.

Una vez que termina de compilar todo el código fuente de ProtegeOWL (tarda un poquito) tendremos a nuestra disposición la librería: protege-owl.jar dentro de la carpeta build/dist/

Y esto es todo. Una vez que tenemos nuestras 3 librerías JAR, podremos importarlas dentro de cualquier proyecto Java y hacer uso de TODA la API de Protege sin necesidad de tener que importar todos los ficheros fuente (.java). Además, esta opción es perfecta si lo que nos interesa es utilizar la API de Protégé tal cual, sin modificar su funcionamiento o añadir funcionalidad adicional creada por nosotros. También podemos compatir estas librerías entre nuestros proyectos de Eclipse utilizando las Librerías del Usuario que expliqué hace unos días.

NOTA: Tened en cuenta que la API de Protege 3.x utiliza por debajo Jena para realizar las operaciones sobre las ontologías. Por tanto si incluís las librerías que hemos obtenido tras la compilación, necesitaréis incluir también las librerías de Jena para que todo el proyecto funcione sin problemas.

Ya sabéis, cualquier duda, sugerencia, mejora, …. será siempre bien recibida.

Más Info:

Anuncios
5 comentarios leave one →
  1. 5 junio 2011 22:49

    Buenas.
    Antes de nada felicitades y gracias por el artículo porque es ideal para los que estamos empezando en ésto. Ahora te tomo la palabra y lanzo una duda.

    Llevo ya no sé cuantos días tratando de hacer ir un mísero hola mundo con la OWLAPI en Eclipse y no ha habido manera, me daba un error al hacer un createJenaOWLModel.
    Antes lo hacía de la otra forma, la que comentas tú que le costaba un montón compilar, y era así, y ahora estoy probando ésta otra que comentas. He seguido todos los pasos con éxito y me lanzo a tratar de ejecutar el OWLAPIDemoApplication del Programmers Guide.
    Me salen un chorro de NoClassDefFoundError :
    Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at com.hp.hpl.jena.rdf.model.impl.PropertyImpl.(PropertyImpl.java:61)
    at com.hp.hpl.jena.rdf.model.ResourceFactory$Impl.createProperty(ResourceFactory.java:244)
    at com.hp.hpl.jena.rdf.model.ResourceFactory.createProperty(ResourceFactory.java:120)
    at com.hp.hpl.jena.vocabulary.RDF.property(RDF.java:32)
    at com.hp.hpl.jena.vocabulary.RDF.(RDF.java:45)

    y un largo etcétera.

    He sospechado que era por lo que decías en tu último párrafo sobre Jena y he agregado jena.jar como librería referenciada, pero me siguen apareciendo. En total tengo a looks, protege, protege-owl y jena. ¿Debería añadir alguna más o tal vez estoy haciendo mal otra cosa?

    Un saludo

    Miguel

    • rekkeb permalink*
      5 junio 2011 23:40

      Hola Miguel:
      El error que comentas creo que no tiene nada que ver con Jena, con OWLAPI, ni nada similar. Viendo la traza del error, parece que te faltan las librerías log4j de Apache. Echa un vistazo a su web oficial y prueba a descargarte la librería. http://logging.apache.org/log4j/
      Ya me contarás 😉

  2. nsilega permalink
    9 enero 2012 16:25

    Hola rekkeb ,

    Le agradezco mucho sus artículos, me han ayudado mucho en vistas a trabajar con las API de Protégé y OWL, realmente sus instrucciones son un material valioso para cualquiera que se introduzca en este campo.
    Quisiera hacerle algunas preguntas, pero en este mensaje me limito a hacerle una sola, ¿De dónde se puede descargar las fuentes para hacer plugin a la versión 4.x de protégé? La pregunta está motivada porque en el sitio oficial de descarga solo se ofrece para la versión 3.x.

    Gracias de antemano
    Saludos

    • rekkeb permalink*
      21 enero 2012 20:55

      Hola nsilega:

      Gracias por tu comentario. Realmente no sabría responderte a esa pregunta. He estado buscando por todo el repositorio SVN de Protege y parece que no tienen disponible el código fuente de la versión 4.x de Protege por el momento.
      No obstante (aunque me imagino que ya la conocerás) te dejo el enlace a la documentación para desarrolladores de Protege: http://protege.stanford.edu/doc/dev.html
      Quizás a alguien más pueda resultarle util.

      Saludos!

      • nsilega permalink
        30 enero 2012 16:25

        Muchas gracias por la respuesta.
        Además de la guía que se ofrece en la wiki para los desarrolladores , ¿Usted sabe de alguna guía en español para el desarrollo de un plugin a protégé 4 y la configuración del entorno de desarrollo ?

        Muchas gracias
        Saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: