Lenguajes de representacion OWL.

Como expliqué en un artículo anterior
 introductorio, la web semántica se basa principalmente en mecanismos
que permiten representar el conocimiento de un modo estandarizado,
haciendo posible su tratamiento automático y la existencia por lo tanto,
 de numerosas nuevas aplicaciones que puedan beneficiarse de estas
representaciones.

La representación del conocimiento como tal, es una materia en la que
 se lleva trabajando desde hace varias décadas, desde mucho antes de que
 surgiera la web semántica. Surgió en el ámbito de la Inteligencia
Artificial al tratar de crear representaciones de conocimiento que
pudieran ser utilizadas por mecanismos que simulasen el razonamiento
humano. Para muchos la Inteligencia Artificial ha sido uno de los
grandes fracasos de la historia informática, pero a pesar de todo, y se
esté de acuerdo o no con esta afirmación, es cierto que ha dejado
innumerables trabajos e investigaciones que han permitido avanzar en muy
 diferentes áreas. Un ejemplo significativo de esto es la web semántica,
 que pese a no ser por sí una rama de la Inteligencia Artificial, se
sustenta sobre uno de los campos de actuación de ésta, como son las
técnicas y lenguajes de representación del conocimiento.

En este artículo voy a hacer un resumen de diversas técnicas,
formalismos y lenguajes que se han ido utilizando a lo largo de las
últimas décadas para representar el conocimiento, con el objetivo de
poder llegar a comprender mejor las tecnologías que se usan hoy en día
en la web semántica.

## Técnicas

de
--

## Conocimiento

Antes de ver los diferentes tipos de formalismos y lenguajes de
representación de conocimiento que se han ido creando a lo largo de los
años, merece la pena enumerar algunas de las diferentes técnicas de
representación del conocimiento que se han utilizado, y sobre las que se
 han sustentado estos lenguajes. Hay que tener en cuenta que no hay una
técnica mejor que las demás, sino que cada una de ellas ha sido aplicada
 con más éxito que otras en determinados ámbitos, por lo que disponen de
 características que las hacen más apropiadas para determinados
problemas.

* Tripletas Objeto-Atributo-Valor: se utilizan para representar hechos

 acerca de objetos y sus atributos, especificando el valor de un
atributo para un determinado objeto. Por ejemplo, para representar que
el coche es rojo, se tendría una tripleta Coche-Color-Rojo. Típicamente
estas tripletas se representan en forma de grafos, utilizando una elipse
 para el objeto, un cuadrado para el valor, y una flecha o arco dirigido
 entre ambos elementos representando el atributo.

* Uncertain Facts o Hechos Inciertos: las tripletas O-A-V indican que

un objeto tiene un valor asociado a un atributo de forma completa y con
toda la certeza, es decir, un coche es rojo o no lo es. Sin embargo no
permiten asignar graduaciones de certeza en estas asignaciones. Así por
ejemplo, existen situaciones en las que podríamos necesitar representar
que un determinado objeto posee un atributo con una determinada certeza,
 lo que se suele denominar certainty factor. Mediante esta
técnica sería posible representar sentencias como “El coche es bastante
potente”, asignando una factor de certeza de 0.7 al atributo potente

* Fuzzy Facts o Hechos Difusos: permiten representar conocimiento

impreciso o ambiguo. Por ejemplo, la expresión “Juan es viejo”, en
comparación con “Juan es joven” o “Juan es de mediana edad”, puede no
ser sencilla de representar con otras técnicas, ya que la edad es algo
gradual, no se pasa de ser joven un día a ser de mediana edad al
siguiente. Esta ténica lo que permite es definir funciones de membresía
que asignan un valor entre 0 y 1 a cada valor. Así por ejemplo, la
función de membresía de edad, asignaría un 1 a joven si la persona tiene
 10 años, pero este valor iría decreciendo conforme aumentase la edad
hasta llegar a 0, pero teniendo en cuenta que antes de eso se habría ido
 incrementando el valor de membresía de “mediana edad” e incluso de
“viejo”, pudiendo haber edades como los 45, en los que se podría decir
que con una persona es joven con un 0.2, vieja con un 0.2 y de mediana
edad con un 0.6.

* Rules: esta técnica representa el conocimiento presentando unas

premisas o condiciones y las conclusiones o acciones que de ellas se
derivan. Se suelen representar de la forma IF – THEN –. Las
premisas se colocan a continuación del IF en forma normalmente de
tripletas O-A-V y utilizando operadores booleanos, mientras que las
conclusiones definirían nuevos hechos o realizarían acciones. Por
ejemplo, podríamos tener la siguiente regla para representar que si hay
que ir a trabajar y está lloviendo hay que coger el paraguas: IF “es
hora de ir a trabajar” AND “está lloviendo” THEN “tengo que coger el
paraguas”.

* Redes Semánticas o Mapas Conceptuales: se basa en la utilización de

grafos que representan conceptos, objetos y relaciones entre ellos.
Estas relaciones pueden ser de cualquier tipo, pero predominan las
relaciones de tipo “kind-of”, “part-of” y “is-a”, que permiten
representar estructuras jerárquicas de conocimiento. Están relacionadas
también con las tripletas O-A-V, ya que en las redes semánticas se
suelen incluir también estas estructuras para dar información sobre los
atributos de los diferentes objetos.

* Frames o Marcos: es una técnica de representación muy similar a la utilizada en la programación orientada a objetos. Consta de **class frames**, similares a las clases, que representan conjuntos de objetos con características similares. A partir de ellas se crean las **instance frames**

```
que representan elementos concretos de esa clase. Por ejemplo,

```

podríamos tener el marco de clase “Persona” y la instancia “Juan”. Cada
frame dispone por otra parte de una serie de **slots**
equivalentes a los atributos y propiedades en orientación a objetos.
Existe también la posibilidad, a diferencia de en las redes semánticas,
de definir lo que se llaman **facets** sobre estos slots,
de forma que se les aporte comportamiento procedural. Por ejemplo, sobre
 un slot edad podríamos añadir el facet “if-changed”, para comprobar el
valor introducido.

## Formalismos

y

## Lenguajes

de
--

## Conocimiento

A partir de las técnicas de representación del conocimiento del punto
 anterior, se han diseñado a lo largo de los años diversos formalismos y
 lenguajes que permiten modelar de un modo formal el conocimiento
representado mediante ellas. Existen diversos formalismos para la
representación del conocimiento, cada uno con sus propios lenguajes y
cada uno con sus ventajas e inconvenientes. En esto, al igual que en la
Ingeniería del Software, no existe la técnica ideal que nos permita
resolver cualquier problema de la mejor manera. Dependerá del tipo de
problema, del conocimiento que se quiera representar, de la expresividad
 que se necesite, y del uso que se le quiera dar, el que un formalismo y
 un lenguaje sea más conveniente que otro.

En los siguientes puntos voy a explicar algunos de los más destacados
 lenguajes que se han utilizado y que se siguen utilizando hoy en día en
 diferentes ámbitos.

### Formal

Muchos de los sistemas de representación del conocmiento de la
actualidad se basan en algún tipo de lógica formal. La lógica formal
aporta un buen número de ventajas para la representación del
conocimiento y su manejo, partiendo de una sintaxis y semántica bien
definidas que detallan perfectamente la forma de construir sentencias y
razonamientos sobre ellas.

#### Proposicional

Una proposición es una sentencia que puede decirse que es falsa o
verdadera. En la lógica proposicional se asigna símbolos a cada
sentencia y se utilizan operadores lógicos sobre ellos para crear
proposiciones más complejas. Los símbolos utilizados son AND (∧), OR
(∨), NOT (¬), IMPLIES (→ o ⇒), y EQUIVALENCE (⇔). Partiendo de los
símbolos y utilizando los diferentes operadores se construyen
proposiciones complejas, las cuales es posible obtener si son ciertas o
falsas operando a partir de los valores de verdad de cada uno de los
símbolos iniciales, utilizando el cálculo proposicional.

Por ejemplo la sentencia si “El libro está en casa (A) y Juan está en
 el trabajo (B), Juan no puede leer el libro (C)”, podría representarse
como: `A ∧ B → C`

#### Orden

Es una ampliación de la lógica proposicional a partir de dos
operadores más, el cuantificador universal ∀ y el existencial ∃. Utiliza
 también símbolos para representar conocimiento y operadores lógicos
para construir sentencias más complejas, pero a diferencia de la lógica
proposicional, los símbolos pueden representar constantes, variables,
predicados y funciones.

Las constantes son símbolos que comienzan por minúsculas y las
variables símbolos que empiezan por mayúsculas. Los predicados
representan afirmaciones sobre objetos, por ejemplo, la afirmación “El
libro está en casa” se representaría como un predicado de nombre in:

`in(libro, casa)`

Se podría reescribir el predicado de forma más general sustituyendo
las constantes por variables de la forma: in(X, Y). Con él podríamos
representar diferentes proposiciones como “El libro está en casa”, “El
coche está en el garaje”, “Juan está en el trabajo”.

El último símbolo que queda por explicar son las funciones. Éstas
permiten asociar elementos de un conjunto a un elemento de otro
conjunto, por ejemplo: propietario(casa) = juan.

Con todo esto podríamos representar el mismo ejemplo que con lógica proposicional de la siguiente forma:

`in(libro, casa) ∧ in(juan, trabajo) → ¬puedeLeer(juan, libro)`

En cuanto a los dos nuevos operadores, ∀ y ∃, permiten delimitar el
alcance de las variables en las sentencias, de forma que “∀X” se leería
como “para toda x” y “∃X” como “existe un x tal que”.

`∃X puedeLeer(X, libro)`: alguien puede leer el libro
`∀X puedeLeer(X, libro)`: todo el mundo puede leer el libro

#### KIF

KIF es un lenguaje lógico basado en lógica de primer orden que fue creado con el objetivo de actuar como interlingua
 entre diferentes formalismos y lenguajes de representación, de forma
que para pasar de un lenguaje A a B no hiciera falta crear un mapeo
específico, sino que fuera suficiente con existir los mapeos A-Kif y
Kif-B.

KIF dispone de su propia sintaxis y algunos añadidos semánticos sobre la lógica de primer orden.

#### Descriptivas

Las lógicas descriptivas están muy relacionadas con el desarrollo de
las ontologías tal como se usan en la actualidad en la web semántica. La
 lógica descriptiva se basa en representar el conocimiento utilizando
por una una terminología o vocabulario del dominio (TBOX) y por otra un
conjunto de afirmaciones (ABOX).

El vocabulario consiste en conceptos y roles. Los
conceptos corresponden a conjuntos de elementos y los roles a relaciones
 binarias entre elementos. Existen conceptos y roles atómicos y complejos.

Por ejemplo, si tenemos como conceptos atómicos “Persona” y “Hembra” y
 como role atómico “tieneHijo”, podríamos tener como TBOX representando
las relaciones familiares algo como lo siguiente:

`Mujer ≡ Persona ∩ Hembra

Hombre ≡ Persona ∩ ¬Mujer

Madre ≡ Mujer ∩ ∃tieneHijo.Persona

Padre ≡ Hombre ∩ ∃tieneHijo.Persona

Progenitor ≡ Madre ∪ Padre

Esposa ≡ Mujer ∩ tieneMarido.Hombre

Marido ≡ Hombre ∩ tieneEsposa.Mujer`

La información recogida en la ABOX podría ser algo como:

`tieneHijo(Juan, Miguel)

Padre(Juan)

Esposa(Juan, María)`

Se pueden construir y existen razonadores que permiten razonar sobre
las TBOX y ABOX, pudiendo determinar por ejemplo si el contenido de la
TBOX es factible, o qué relaciones están incluidas en otras. Al trabajar
 sobre el ABOX, un razonador puede indicar que a partir de las
afirmaciones existentes un determinado elemento es una instancia de un
concepto y si las afirmaciones son consistentes con el modelo.

### Marcos

Estos lenguajes son similares a los lenguajes de programación
orientados a objetos, en el sentido de que modelan el conocimiento
utilizando clases (frames), atributos, objetos y relaciones, y utilizan
relaciones de generalización y especialización para representar la
organización jerárquica de los conceptos.
Uno de los posibles lenguajes basados en frames es KM. Mediante este
lenguaje definimos a continuación que cada “venta” consta de un objeto
que se vende y un vendedor y comprador:

```
(every Venta has
   (vendedor((a Agent)))
   (objeto((a Thing)))
   (comprador((a Agent)))
)

```

Inicialmente se crearon multitud de lenguajes basados en marcos
diferentes, la mayoría incompatibles entre si. En 1985 se creo KL-ONE
que utilizando formalismos de lógica descriptiva aportó rigor a
diferentes lenguajes que se crearon posteriormente basados en él.
Es importante mencionar que muchos de los lenguajes basados en marcos
 se pueden considerar como únicamente sintaxis diferentes de la lógica
de primer orden y que por lo tanto no ofrecen más expresividad que ella.
 Esto hace también por otro lado que tengan representaciones
equivalentes en el lengujaje KIF visto en un punto anterior.

### Reglas

Estos lenguajes han sido durante mucho tiempo posiblemente los más
usados de todos, principalmente debido a su estrecha relación con los
Sistemas Expertos utilizados en Inteligencia Artificial. Estos lenguajes
 son fáciles de entender debido a su sencillez conceptual y a su
paralelismo con las estructuras de control más simples utilizadas en
programación.

Existen diversos tipos de lenguajes basados en reglas, que se
diferencian por el tipo de cosas permitidas en las reglas, como si
permiten únicamente la definición de afirmaciones en la parte THEN o si
tambíen permiten comportamiento procedural, el uso de lógica difusa en
los hechos, etcétera. Una de las tendencias más recientes pasa por
mezclar los conceptos de frames y reglas, como en el caso de Jess, para
disponer de lenguajes que permitan reunir la información de cada
concepto y asociar a alguno de sus slots conjuntos de reglas. Esto
aporta orden a la información, que suele ser algo difícil de conseguir
conforme la base de conocimiento crece y el número de reglas aumenta, al
 tener dispersa la información de cada concepto y mezclada con otros.

Este tipo de lenguajes han recibido también un fuerte impulso a
partir de la aparición de la web semántica, ya que que se piensa en
ellos como herramientas para definir servicios web, y como herramienta
base que permita definir la forma en la que pueden interactuar las
aplicaciones de comercio electrónico. Para ello se ha creado una
iniciativa Rule Markup Initiative que ha diseñado el lenguaje **RuleML**, basado en XML y que por lo tanto está pensado desde su concepción para garantizar la interoperabilidad necesaria en el web.

Este nuevo lenguaje incluye las siguientes características:

* Reglas de pruducción: reglas del tipo IF-THEN habituales en los sistemas expertos.
* Reglas de integridad: afirmaciones que se deben cumplir en cualquier estado del sistema
* Reglas reactivas: reglas que realizan acciones cuando se cumple un evento o se dan unas determinadas circunstancias
* Reglas de derivación: reglas para definir conceptos derivados a partir de otros
* Reglas de transformación: permiten crear reglas a partir de un llamador, una condición, y una transformación.

Podemos representar en RuleML la sentencia “Si a alguien le gusta la
lectura, entonces a Juan le gusta esa persona” de la siguiente forma:

```
<rulebase label="gustaLectura">
   <imp>
       <_head><atom>
        <rel>gustar</rel>
       <ind>Juan</ind>
       <var>x</var>
      </atom></_head>
     <_body><atom>
        <rel>gustar</rel>
       <var>x</var>
        <ind>lectura</ind>
     </atom></_body>
   </imp>
 </rulebase>

```

## Ontologías

El concepto de ontología en el ámbito de la informática se obtuvo del
 campo de la filosofía, con el objetivo de abarcar cualquier tipo de
representación de conocimiento. Es por esto que el concepto de ontología
 es muy amplio y se ha venido usando prácticamente para cualquier tipo
de modelado de dominio de conocimiento, y razón por la cual también, hay
 multitud de definiciones que intentan acortar formalmente qué es una
ontología y qué no lo es.

Una de las definiciones más consensuadas es la proporcionada por Grubber, **An ontology is a formal explicit specification of a shared conceptualisation**. En esta definición, explicit se refiere a la necesidad de detallar los diferentes conceptos que forman la ontología, formalindica que el conocimiento que modelemos debe representarse según un lenguaje formalizado e interpretable fácilmente y shared
 indica que la ontología modela el conocimiento común sobre la materia,
para las diferentes personas que deben usarla. Este último punto
referido al conocimiento compartido es una de las principales
diferencias sobre otros modelos de conocimiento, en los que muchas veces
 no se tenía en cuenta el concepto de concocimiento compartido.

Aún así, esta definición es muy amplia, y engloba el modelado de
conocimiento con muy diferentes técnicas, formalismos y lenguajes.
Dentro del ámbito de la web semántica hay un conjunto de lenguajes
basados en XML que se han ido definiendo como estándares, como son el
caso de RDF, RDFS o DAML+OIL. A partir de estos el W3C creo la propuesta
 de OWL, con sus 3 sublenguajes (OWL-Lite, OWL-DL y OWL-Full), como
lenguaje para modelar ontologías en el entorno de la web semántica,
aunque es posible utilizar este lenguaje para representar modelos de
dominio en cualquier ámbito que sea necesario, como para la gestión de
procesos, o incluso requisitos software, por poner un par de ejemplos.

En cuanto a la relación de OWL con los formalismos de representación
que hemos visto, una característica importante es que el sublenguaje
OWL-DL, es compatible con la lógica descriptiva, de donde obtiene su
nombre, teniendo por tanto su mismo poder expresivo. Más en concreto, es
 OWL-DL es equivalente a un tipo de lógica descriptiva denominado SHOIN(D). OWL-Lite se corresponde también con una lógica descriptiva, pero de menor poder expresivo, denominada SHIF(D).