Crear Una Ontología OWL usando la API de ProtegeOWL 3.4

2009 Abril 8
by rekkeb

En este artículo vamos a ver cómo podemos crear una ontología fácilmente utilizando la API de ProtegeOWL 3.4 y usando como lenguaje de programción Java con el IDE Eclipse.

Lo primero que debemos tener en cuenta es que debemos tener instalada la API de Protege y haberla configurado en nuestro proyecto de Eclipse. Aquí podéis ver cómo instalar y configurar la API.

La ontología que crearemos es muy sencilla. El objetivo es aprender: cómo crear Clases, cómo definir Subclases, cómo añadir propiedades de datos a esas clases y por último como crear instancias y dar valores a las propiedades.

NOTA: Recordad, que los valores que demos a cada una de las propiedades, se establecen a nivel de Instancias, es decir, son las instancias las que tienen valores concretos para las propiedades. En las clases sólo definiremos el rango y el dominio de la propiedad.

La ontología representará una taxonomía de Animales (muuuuuuy simple). Un animal podrá ser invertebrado o vertebrado y un animal tendrá una propiedad que es el “Peso”, cuyo rango (tipo) será float.

Por tanto la propiedad “Peso” tendrá como dominio Animal y como rango Float.

Por último crearemos dos instancias, una para vertebrados y otra para invertebrados. Leopardo y Pulpo por ejemplo.

Pues sin más vamos a ver el código:

public class JenaMain {
  public static void main(String[] args) {
    try {

      JenaOWLModel jModel;
      Collection errors = new ArrayList();
      jModel = ProtegeOWL.createJenaOWLModel();

	//Establecemos la URI principal de nuestra ontologia
	jModel.getDefaultOWLOntology()
              .rename("http://www.owl-ontologies.com/OntoAnimales.owl");
	//Establecemos el namespace por defecto
	jModel.getNamespaceManager()
              .setDefaultNamespace("http://www.owl-ontologies.com/OntoAnimales.owl#");

	//Obtenemos el namespace por defecto que acabamos de configurar
	String NS = jModel.getNamespaceManager().getDefaultNamespace();

	//Creamos la clase animal
	OWLNamedClass clsAnimal = jModel.createOWLNamedClass("Animales");
	//Vamos a crear las subclases Vertebrados e Invertebrados
	OWLNamedClass clsVert;
        clsVert = jModel.createOWLNamedSubclass("Vertebrados", clsAnimal);
        OWLNamedClass clsInVert;
        clsInVert = jModel.createOWLNamedSubclass("Invertebrados", clsAnimal);

	//Decimos que un vertebrado no puede ser invertebrado y viceversa
	//clsAnimal.setSubclassesDisjoint(true);

	//Vamos a crear algunas propiedades, como el peso,... o las que queramos
	OWLDatatypeProperty propPeso = jModel.createOWLDatatypeProperty("peso");
	propPeso.setFunctional(true);
	//Definimos la propiedad como Functional para que sólo pueda contener un
        //valor. En OWL cada propiedad puede contener una lista de valores, no un
        //único valor. Pero en este caso no nos interesa eso.

	//Asignamos la propiedad a la clase Animal
	propPeso.setDomain(clsAnimal);
	//Definimos el tipo (rango) de la propiedad como float
	propPeso.setRange(((OWLModel)jModel).getXSDfloat());

	//Vamos a crear un par de instancias
	OWLIndividual leopard = clsVert.createOWLIndividual("Leopardo");
	//Le asignamos un peso al leopardo
	leopard.setPropertyValue(propPeso, new Float(250.49f));

	//Creamos un pulpo
	OWLIndividual pulpo = clsInVert.createOWLIndividual("Pulpo");
	//Le asignamos un peso
	pulpo.setPropertyValue(propPeso, new Float(14.20f));

	//La Guardamos en un fichero owl
	jModel.save(new URI("file:///Users/Rekeb/Desktop/Animales.owl"),
                    FileUtils.langXMLAbbrev,errors);
	System.out.println("ERRORES: "+errors);

	} catch (OntologyLoadException oe){
		oe.printStackTrace();
	} catch (URISyntaxException e) {
		e.printStackTrace();
	}
   }
}

De esta forma, cuando termine de ejecutarse, tendremos en nuestro escritorio un fichero Animales.owl que contendrá nuestra ontología en lenguaje OWL y que además podremos abrir sin ningún problema con Protégé y podremos navegar por las clases que acabamos de crear, sus subclases y las instancias. El resultado debe ser parecido al siguiente:

protege-animales

4 comentarios dejar un →
  1. 2009 Mayo 17

    que buena información, te seguiré y de la misma forma me mantendre en contacto para en un futuro compartir información,,, nosotros estamos en los mismo,,,

    saludos y gracias por la info

  2. 2009 Mayo 17

    De nada hombre. A ver si dentro de poco saco tiempo y escribo una entrada un poco más avanzada, ya que éstos ejemplos eran muy introductorios ;)

    • 2009 Octubre 5

      Hola,,, estoy muy interesa en tu articulo, pues he empezado a investigar todo con respecto a los estándares OWL,, y me gustó mucho tu artículo,, crees que me podrías ayudar y explicarme un poco más profundo?
      gracias adelantado

      • 2009 Octubre 5

        Realmente hay muchisima literatura en internet para aprender sobre este mundillo de las ontologías. Lo más básico a la hora de empezar a trabajar con ontologías es conocer todos los términos que se utilizan y aprender la filosofía de trabajo.
        Lo que puede resultar más dificil al principio es lo abstracto que resulta todo cuando empiezas de cero y no sabes hacia dónde ir. Pero poco a poco y sin mucho esfuerzo te moverás con soltura por el mundo OWL y su terminología.
        Si puedo ayudarte en algo, por supuesto, para eso estamos.

Escribe un comentario

Nota: Puede usar XHTML básico en sus comentarios. Su dirección de correo electrónico nunca será publicada.

Subscripción al comentario vía RSS