Crear Una Ontología OWL usando la API de ProtegeOWL 3.4
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:

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
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
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
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.