Dharma ha sido concebido como un middleware semántico que permitirá una búsqueda y activación más inteligente de servicios, abstrayendo los detalles de implementación a aquellos que quieran hacer uso de servicios o dispositivos ya desplegados, ofreciendo para ello una interfaz ortogonal de búsqueda e instanciación.

Dharma se construye sobre la base del modelo semántico propuesto en [1] y que se resume en los conceptos y relaciones de la siguiente figura:

ontology

Modelo semántico propuesto para el modelado de sensores y actuadores

Este modelo nos sirve para establecer la terminología utilizada en los conceptos y relaciones entre ellos relevantes en el contexto de un entorno inteligente, como es la Smart City. Sin embargo aún debemos establecer cómo denominaremos a los dispositivos, servicios, acciones y objetos específicos que se vayan a declarar. Para ello recurrimos a la ontología publicada en https://www.auto.tuwien.ac.at/downloads/thinkhome/ontology/EnergyResourceOntology.owl. Esta ontología puede visualizarse con Protégé.

Ejemplo de modelado de un dispositivo de iluminación

Pero para entender mejor este proceso, veamos cuál sería el procedimiento seguido para modelar una luz, utilizando el modelo semántico propuesto. Para ello, habrá que realizar los siguientes pasos:

1. Describir la luz como un «device» del modelo semántico. Para ello, dado que la base de conocimiento no está aún lo suficientemente poblada, habrá que describir los conceptos de luz y emisor para que podamos después explicar qué es un dispositivo de iluminación en base a esos conceptos.

(new-type {light} {thing})
(new-type {emitter} {thing})

Una vez explicados los conceptos de luz y emisor, podremos decir que un «light-emitter» es un dispositivo Dharma, lo que implica que a todos los efectos se comportará como tal, ofreciendo servicios.

(new-type {light-emitter} {dharma-device})
(new-is-a {light-emitter} {emitter})

Este dispositivo es además un dispositivo emisor y como tal será capaz de emitir, en este caso, luz.

Como no existe ninguna relación en la base de conocimiento que describa la relación de emisión, la definimos y después la utilizamos para relacionar el light-emitter con la luz, en función de su relación de emisión.

(new-relation {emits} :a-inst-of {emitter} :b-inst-of {thing})
(new-statement {light-emitter} {emits} {light})

2. Describir los servicios que el despositivo light-emitter puede ofrecer

Para ello primero hay que especificar que el servicio de iluminación también será un servicio Dharma.

(new-type {light-service} {dharma-service})

Este servicio ofrece o realiza dos acciones: «light-up» y «light-down»

(x-is-the-y-of-z {light-up} {performs-action} {light-service})
(x-is-the-y-of-z {light-down} {performs-action} {light-service})

3. Definiremos las acciones ofrecidas por los servicios en función del estado del contexto antes y después de realizar la acción

(new-action-type {light-up} :agent-type {thing} :object-type {light} :recipient-type {bulb})

Se describe la acción light-up como una acción que puede realizarse por cualquier objeto (una persona, un actuador, etc.). El objeto de la acción es la luz y quien recibe la acción light-up será un objeto de tipo bombilla.

(new-indv {bulb-instance} {bulb})
(x-is-the-y-of-z {bulb} {action object} {light-up})

En Scone (la base de conocimiento utiliazada) una acción se describe en base al contexto antes, durante y después de que la acción tenga lugar. Así, el contexto antes de encender la luz se caracteriza porque la bombilla no emitirá luz mientras que el contexto después de haber realizado la acción light-up se caracteriza por la bombilla estará emitiendo luz.

;; Before context
(new-context {light-up BC} {dharma})
(new-is-a {light-up BC} {before context})
(x-is-the-y-of-z {light-up BC} {before context} {light-up})

(in-context {light-up BC})
(new-is-not-a {bulb-instance} {light-emitter})
(new-not-statement {bulb-instance} {emits} {light})

;; After context
(in-context {dharma})
(new-context {light-up AC} {dharma})
(new-is-a {light-up AC} {after context})
(x-is-the-y-of-z {light-up AC} {after context} {light-up})

(in-context {light-up AC})
(new-is-a {bulb-instance} {light-emitter})
(new-statement {bulb-instance} {emits} {light})

REFERENCIAS

[1] Maria J. Santofimia, Scott E. Fahlman, Xavier del Toro, Francisco Moya, Juan Carlos López:
A semantic model for actions and events in ambient intelligence. Eng. Appl. of AI 24(8): 1432-1445 (2011) https://arco.esi.uclm.es/public/papers/2011-EAAI.pdf