Ejemplo de inferencia de relaciones

Los repositorios en los que almacenamos las ontologías OWL pueden ser RDF(S)-aware. Esto significa que es capaz de inferir nuevas relaciones entre entidades que no están definidas explícitamente a través de distintas propiedades como la transitividad. Aunque en la mayoría de los casos se usa un "razonador" (un motor que analiza las ontologías) aparte que detecta inconsistencias e infiere automáticamente relaciones y las coloca de forma explícita en el repositorio.

En este capítulo vamos a ver un ejemplo de cómo utilizar un razonador para inferir relaciones implícitas. Para ello, utilizaremos Protégé. Éste es un editor de ontologías de código abierto y gratuito creado por la Universidad de Stanford. Por defecto, trae instalado el razonador HermiT, aunque es posible añadirle otros.

Descarga e instalación de Protégé

Nos dirigiremos a la página oficial de descarga y elegiremos la última versión disponible. A la hora de realizar este tutorial, es la versión 5.0.

La instalación es muy sencilla, aunque depende del sistema operativo. Podemos acudir a esta página si queremos instrucciones concretas o tenemos algún problema con la instalación. Para la versión 5.0 de Protégé es necesaria la versión 7 de Java.

Ejemplo sencillo de inferencia

Ilustraremos los pasos necesarios para ver un ejemplo de lo que puede hacer el razonador, pero no exploraremos a fondo las posibilidades y el funcionamiento de Protégé. Se puede acceder a una guía de uso sencilla del editor aquí. También tenéis un completo tutorial que muestra paso por paso las posibilidades del editor con marco teórico incluido a través de un ejemplo en su página oficial aquí. Y aquí si no funcionara el enlace anterior.

Al abrir por primera vez el editor, nos encontraremos una ventana parecida a la siguiente.

En "Ontology IRI" escribiremos la URI raíz que tendrá nuestra ontología. Por ejemplo, "http://ejemplo.com/inferencia".

Ahora iremos a la pestaña "Entities" para definir las entidades que vamos a usar. Podemos fijarnos en en que donde aparece la jerarquía de clases tenemos dos pestañas "Class Hierarchy" y "Class Hierarchy (Inferred)". En la pestaña de la izquierda es donde nosotros editaremos y en la de la derecha aparecerán las clases inferidas o marcadas como inconsistentes por el razonador.

Únicamente utilizaremos la entidad "Persona". Para ello, haremos click en "Thing" y en el botón de arriba a la izquierda para crear una subclase de ésta.

A continuación iremos a la pestaña "Object Properties" para definir las propiedades que puede tener un objeto. Todas las propiedades que creemos deben ser descendientes de "topObjectProperty", que es la que viene por defecto.

Hacemos click en ésta y en el botón de arriba a la izquierda para crear la propiedad "Descendiente_de".

Volvemos a hacer lo mismo para crear la propiedad "Antecesor_de".

Hacemos click en "Antecesor_de" y marcamos "Transitive" en el cuadro "Character". Esto hará que el razonador reconozca la propiedad como transitiva. Es decir, si A es antecesor de B y B es antecesor de C, automáticamente pueda deducir que A es antecesor de C. En el cuadro de "Description" hacemos click en el "+" al lado de "Inverse Of" y señalamos "Descendiente_de". Así le estamos diciendo que una propiedad es la inversa de la otra. En "Descendiente_de" se marcará "Antecesor_de" como propiedad inversa de forma automática.

Nos vamos ahora a la pestaña "Individuals" para crear las distintas instancias de Persona.

Hacemos click en el botón del cuadro "Members list" y creamos una persona que se llame "Juan".

Repetimos el procedimiento para crear a "Gema" y "Raúl".

Nuestra intención es indicar que Juan es el padre de Gema, y a su vez Gema es madre de Raúl. Para ello, seleccionamos a Gema y en el cuadro "Property assertions" pulsamos en el "+" al lado de "Object property assertions" y seleccionamos "Descendiente_de" y "Juan".

Repetimos el mismo procedimiento con Raúl para hacerlo "Descendiente_de" Gema.

Ahora arrancamos el razonador. Para ello vamos al menú principal del programa, a "Reasoner". Por defecto estará señalado el razonador "HermiT". Pulsamos en "Start reasoner".

Si vemos las propiedades de Raúl haciendo click en su nombre, veremos que el razonador ha deducido que es "Descendiente_de" Juan por la propiedad transitiva.

Si vemos las propiedades de Gema haciendo click en su nombre, veremos que el razonador ha deducido que es "Antecesor_de" Raúl porque ser propiedad inversa.

Por último, hacemos click en el nombre de Juan para comprobar que el razonador ha deducido correctamente que es antecesor de los otros dos, por propiedad inversa y por transitividad.

Con esto termina nuestro ejemplo. Os animamos a seguir la guía indicada al inicio del capítulo que muestra un ejemplo mucho más completo del potencial de Protégé.

results matching ""

    No results matching ""