Skip to content

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

8 abril 2009

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

Más Info

Jena API | Crear una ontología con Jena

11 comentarios leave one →
  1. visualkm permalink
    17 mayo 2009 14:35

    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. rekkeb permalink*
    17 mayo 2009 16:37

    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😉

    • Diana permalink
      5 octubre 2009 19:22

      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

      • rekkeb permalink*
        5 octubre 2009 23:02

        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.

  3. esme123 permalink
    21 junio 2011 08:17

    Estaba leyendo tus post, y me surge un inquietud, que diferencia existe entre trabajar con Jena y el API-Protegé?……

    • rekkeb permalink*
      23 junio 2011 23:12

      La diferencia básica radica en los métodos que vas a usar para acceder a las ontologías y la forma de usarlos. Me explico.
      Jena es la librería por excelencia para gestionar ontologías desde Java y permite trabajar a bajo nivel con ellas. Mientras que la API de Protege actúa a modo de recubridor que utiliza por debajo a Jena para el acceso a las ontologías, pero proporciona una serie de métodos que nos facilitan el trabajo y nos permiten controlar las ontologías a alto nivel.
      Puedes obtener los mismos resultados utilizando una u otra. Una gran ventaja que tiene para mí la API de Protege, es que facilita mucho el trabajo con las reglas SWRL.

  4. ernesto permalink
    3 noviembre 2011 16:25

    Necesito informacion sobre neon proyect para las ontologias, te agradezco tu ayuda

    • rekkeb permalink*
      4 noviembre 2011 00:48

      Hola ernesto, me temo que no puedo ayudarte en eso ya que no conozco neon proyect😦. Sorry.

  5. Nacho permalink
    30 abril 2012 08:23

    Hola, una pregunta, soy novato en esto de las ontologias y quisiera saber, una vez que ya cree mi ontologia en protégé, como puedo explotarlas, es decir, que herramientas debo usar para usar mi ontologia

    • rekkeb permalink*
      30 abril 2012 11:02

      Yo diría que Protégé es la herramienta por excelencia para la creación y gestión de ontologías. Además si su funcionamiento se te queda pequeño en alguna ocasión, puedes programar tus propios plugins o ampliar los que ya vienen instalados😉

  6. 9 septiembre 2015 03:51

    Saludos muy buenos articulos, y pues estoy haciendo un proyecto con ontologias, pero la verdad ya me trabe jejej, mi intencion es hacer un sistema de gestion escolar pero con ontologias, y bueno el caso es que no se si se pueda programar en Ajax para crear una interfaz de usuario, y que toda la gestión de la ontologia sea transparente para el usuario como si se tratara de una base de datos común, es decir, hacer altas, bajas etc, y podrias pensar que por que no lo hago con bases de dato comunes, y bueno el chiste es que quiero dotar de sentido a la información que se genere en la institucion para que las consultas de desiciones las pueda gestionar directamente la maquina, saludos y ojala pudieras ayudarme.

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: