30
ONTOLOGÍAS (PARTE 1) Grupo Arnoia : Piñón Martínez, Mª Isabel 77411600-V Rey Varela, Iria 36166139-L

Ontologias

Embed Size (px)

Citation preview

Page 1: Ontologias

ONTOLOGÍAS (PARTE 1)

Grupo Arnoia:

Piñón Martínez, Mª Isabel 77411600-V

Rey Varela, Iria 36166139-L

Page 2: Ontologias

2

INDICE

Introducción Soporte de JADE para Ontologías

Definición de una Ontología Ejemplo “Frutas”

Cuestiones y Ejercicio

Page 3: Ontologias

3

INTRODUCCIÓN

Page 4: Ontologias

4

INTRODUCCIÓN Una Ontología es la "especificación de una conceptualización", la

descripción de los conceptos y relaciones entre ellos, que pueden formar parte del conocimiento de un agente o una sociedad de agentes.

La necesidad de utilizar ontologías viene dada por: Abundancia de comunicación entre agentes. Interoperabilidad de sistemas y plataformas. Problemas semánticos.

JADE proporciona tres formas distintas de llevar a cabo la comunicación: La forma más básica es utilizar cadenas Objetos serializables de Java Definir los objetos que van a ser transferidos como extensión de las

clases predefinidas por JADE

Page 5: Ontologias

5

INTRODUCCIÓN Una ontología en JADE, se define de forma que los agentes se comuniquen

utilizando el tercer método descrito. El soporte JADE para ontologías incluye las clases para trabajar con éstas y con los lenguajes de contenido: Los lenguajes de contenido tienen que ver con la representación

interna del contenido de los mensajes ACL. Las ontologías tienen que ver con la semántica de los mensajes que se

intercambian y su chequeo.

Incorporamos contenido semántico. Las ontologías se definen en base a objetos de Java. Necesitamos encapsular o codificar la semántica de esos objetos dentro de

mensajes ACL, y hacer el proceso contrario. Lenguajes de contenido (LEAP y SL) y soporte Jade para el manejo de

ontologías.

Page 6: Ontologias

6

SOPORTE DE JADE PARA ONTOLOGÍAS Jade incorpora, en el paquete jade.content, soporte (codecs), para dos

lenguajes de contenido: El lenguaje SL es legible por los humanos y codifica las expresiones

como string. El lenguaje LEAP no es legible por los humanos y es byte-encoded.

Una ontología es una instancia de la clase jade.content.onto.Ontology en la cual se definen los Schemas (jade.content.schema): Predicados (PredicateSchema) Acciones de los agentes (AgentActionSchema) Conceptos (ConceptSchema) Otros elementos

Page 7: Ontologias

7

SOPORTE DE JADE PARA ONTOLOGÍAS

Page 8: Ontologias

8

DEFINICIÓN DE UNA

ONTOLOGÍA

Page 9: Ontologias

9

DEFINICIÓN DE UNA ONTOLOGÍA Como una ontología es básicamente una colección de esquemas que

normalmente no varían a lo largo del ciclo de vida de un agente, es recomendable declarar la ontología siguiendo el patrón singleton, de modo que sólo se pueda crear un objeto de esa clase. Esto nos permite compartir la misma ontología (y todos los esquemas incluidos) entre todos los agentes que se estén ejecutando en la JVM.

Page 10: Ontologias

10

EJEMPLO “FRUTAS”

frutasOntology(Ontology)

Fruta(Concept)

NOMBRE: StringPRECIO: Integer

Oferta(Predicate)

FRUTA: Fruta

Comprar(Action)

FRUTA: Fruta

Page 11: Ontologias

11

EJEMPLO “FRUTAS”

package examples.frutasOntology;import jade.content.onto.*;import jade.content.schema.*; public class frutasOntology extends

Ontology { // Nombre de la ontología public static final String

ONTOLOGY_NAME = "ontología de frutas";

  // Vocabulario de la ontología que

van a manejar los agentes public static final String FRUTA =

"Fruta"; public static final String

FRUTA_NOMBRE = "nombre"; public static final String

FRUTA_PRECIO = "precio";

 …

…public static final String OFERTA = "Oferta"; public static final String OFERTA_FRUTA = "fruta";  public static final String COMPRAR = "Comprar"; public static final String COMPRAR_FRUTA = "fruta";  // Instancia de la ontología (que será única) private static Ontology instancia = new frutaOntology();  // Método para acceder a la instancia de la ontología public static Ontology getInstance() { return instancia; }

Page 12: Ontologias

12

EJEMPLO “FRUTAS”

…// Constructor privado

private frutasOntology() {

// frutasOntology extiende la ontología básica

super(ONTOLOGY_NAME, BasicOntology.getInstance());

 

try {

// Añade los elementos

add(new ConceptSchema(FRUTA), Fruta.class);

add(new PredicateSchema(OFERTA), Oferta.class);

add(new AgentActionSchema(COMPRAR), Comprar.class);

 

// Estructura del esquema para el concepto FRUTA

ConceptSchema cs = (ConceptSchema) getSchema(FRUTA);

cs.add(FRUTA_NOMBRE, (PrimitiveSchema) getSchema(BasicOntology.STRING));

cs.add(FRUTA_PRECIO, (PrimitiveSchema) getSchema(BasicOntology.INTEGER));

Page 13: Ontologias

13

EJEMPLO “FRUTAS”

…// Estructura del esquema para el predicado OFERTA

PredicateSchema ps = (PredicateSchema) getSchema(OFERTA);

ps.add(OFERTA_FRUTA, (ConceptSchema) getSchema(FRUTA));

 

// Estructura del esquema para la acción COMPRAR

AgentActionSchema as = (AgentActionSchema) getSchema(COMPRAR);

as.add(COMPRAR_FRUTA, (ConceptSchema) getSchema(FRUTA));

}

catch (OntologyException oe) {

oe.printStackTrace();

}

}

}

Page 14: Ontologias

14

EJEMPLO “FRUTAS”

package examples.frutasOntology; 

import jade.content.Concept;

public class Fruta implements Concept

private String nombre;

private int precio; 

public String getNombre()

{ return nombre; } 

public void setNombre(String n)

{ nombre = n; } 

public int getPrecio()

{ return precio; } 

public void setPrecio(int p)

{ precio = p; }

}

Page 15: Ontologias

15

EJEMPLO “FRUTAS”

package examples.frutasOntology;

import jade.content.Predicate; 

 

public class Oferta implements Predicate {

 

private Fruta fruta; 

public Fruta getFruta() {

return fruta;

}

 

public void setFruta(Fruta f) {

fruta = f;

}

}

Page 16: Ontologias

16

EJEMPLO “FRUTAS”

package examples.frutasOntology; 

import jade.content.AgentAction; 

public class Comprar implements AgentAction

private Fruta fruta; 

public Fruta getFruta() {

return fruta;

public void setLibro(Fruta f) {

fruta = f;

}

}

Page 17: Ontologias

17

La información se guarda como un objeto de la clase Oferta, que tenemos que convertir a formato ACL para realizar el acto comunicativo. En el receptor se realizará el proceso contrario.

La conversión y las operaciones de chequeo son llevadas a cabo por un objeto que gestiona el contenido, este objeto se denomina ContentManager y está incluído en el paquete jade.content.

Cada agente en JADE posee un ContentManager al que puede acceder usando el método getContentManager(). Esta clase proporciona todo los métodos de transformación de un objeto a un string para introducirlo en un slot de un ACLMessage y viceversa.

Page 18: Ontologias

18

La conversión la realiza a partir de: Una ontología (la que hemos definido). Un codec de un lenguaje de contenido (instancia de la clase Codec del

paquete jade.content.lang).

La ontología permite validar la información desde un punto de vista semántico y el codec realiza la conversión a string según las reglas sintácticas del lenguaje de contenido.

JADE define dos lenguajes de contenidos predefinidos. En el paquete jade.content se incluyen dos codecs para dos lenguajes de contenido, los tipos de lenguaje son los siguientes: Lenguaje SL (jade.content.lang.sl) Lenguaje LEAP (jade.content.lang.leap).

Page 19: Ontologias

19

EJEMPLO “FRUTAS”

package examples.frutasOntology;

public class Comprador extends Agent { private Codec codec = new SLCodec();

private Ontology ontologia = frutasOntology.getInstance(); // Clase que describe el comportamiento que permite recibir un mensaje // y contestarlo class WaitPingAndReplyBehaviour extends SimpleBehaviour { private boolean finished = false; public WaitPingAndReplyBehaviour(Agent a) { super(a); }

Page 20: Ontologias

20

EJEMPLO “FRUTAS”

public void action() { System.out.println("\nEsperando oferta del Vendedor....");

MessageTemplate mt = MessageTemplate.and( MessageTemplate.MatchLanguage(codec.getName()), MessageTemplate.MatchOntology(ontologia.getName())); ACLMessage msg = blockingReceive(mt); try { if(msg != null){ if(msg.getPerformative() == ACLMessage.NOT_UNDERSTOOD){ System.out.println("Mensaje NOT UNDERSTOOD recibido");}

else{ if(msg.getPerformative()== ACLMessage.INFORM){ ContentElement ce = getContentManager().extractContent(msg); if (ce instanceof Oferta){ // Recibido un INFORM con contenido correcto Oferta of = (Oferta) ce; Fruta fru = of.getFruta(); System.out.println("Mensaje recibido:"); System.out.println("Nombre: " + fru.getNombre()); System.out.println("Precio: " + fru.getPrecio());}

Page 21: Ontologias

21

EJEMPLO “FRUTAS”

else{ // Recibido un INFORM con contenido incorrecto ACLMessage reply = msg.createReply(); reply.setPerformative(ACLMessage.NOT_UNDERSTOOD); reply.setContent("( UnexpectedContent (expected ping))"); send(reply); } } else { // Recibida una performativa incorrecta ACLMessage reply = msg.createReply(); reply.setPerformative(ACLMessage.NOT_UNDERSTOOD); reply.setContent("( (Unexpected-act "+ACLMessage.getPerformative

(msg.getPerformative())+")( expected (inform)))"); send(reply); } } }else{ //System.out.println("No message received");} } catch (jade.content.lang.Codec.CodecException ce) { System.out.println(ce);} catch (jade.content.onto.OntologyException oe) { System.out.println(oe);}}

Page 22: Ontologias

22

EJEMPLO “FRUTAS”

En este caso, el lenguaje elegido es el SL.

public boolean done() { return finished;} } //Fin de la clase WaitPingAndReplyBehaviour

protected void setup() { getContentManager().registerLanguage(codec); getContentManager().registerOntology(ontologia); WaitPingAndReplyBehaviour PingBehaviour;

PingBehaviour = new WaitPingAndReplyBehaviour(this);

addBehaviour(PingBehaviour); } } //Clase Comprador

Page 23: Ontologias

23

EJEMPLO “FRUTAS”

package examples.frutasOntology;

public class Vendedor extends Agent { private Codec codec = new SLCodec(); private Ontology ontologia = frutasOntology.getInstance(); class EnviarMensajeBehaviour extends SimpleBehaviour { private boolean finished = false; public EnviarMensajeBehaviour(Agent a) { super(a); }

Page 24: Ontologias

24

EJEMPLO “FRUTAS”

public void action() { try { System.out.println("\nIntroduce el nombre del DESTINATARIO (…): "); BufferedReader buff = new BufferedReader(new InputStreamReader(System.in)); String respuesta = buff.readLine(); AID r = new AID(); r.setLocalName(respuesta); ACLMessage msg = new ACLMessage(ACLMessage.INFORM); msg.setSender(getAID()); msg.addReceiver(r); msg.setLanguage(codec.getName()); msg.setOntology(ontologia.getName()); System.out.println("\nIntroduce el NOMBRE de la fruta:"); respuesta = buff.readLine(); Fruta fru = new Fruta(); fru.setNombre(respuesta); System.out.println("\nIntroduce el PRECIO:"); respuesta = buff.readLine(); fru.setPrecio(Integer.parseInt(respuesta)); Oferta of = new Oferta(); of.setFruta(fru); getContentManager().fillContent(msg, of); send(msg); }

Page 25: Ontologias

25

EJEMPLO “FRUTAS”… catch (java.io.IOException io) {System.out.println(io); } catch (jade.content.lang.Codec.CodecException ce) { System.out.println(ce); } catch (jade.content.onto.OntologyException oe) { System.out.println(oe); }

catch (Exception e){System.out.println("\n\n... Terminando ...");finished=true;

} } public boolean done() {

return finished;}

} // Fin de la clase EnviarMensajeBehaviour

...

Page 26: Ontologias

26

EJEMPLO “FRUTAS”protected void setup() { /** Registrarse en el DF */ DFAgentDescription dfd = new DFAgentDescription(); ServiceDescription sd = new ServiceDescription(); sd.setType("Vendedor"); sd.setName(getName()); sd.setOwnership("ARNOIA"); dfd.setName(getAID()); dfd.addServices(sd); try {

DFService.register(this,dfd); } catch (FIPAException e) { System.err.println(getLocalName()+" registration with

DF unsucceeded. Reason: "+e.getMessage()); doDelete(); } getContentManager().registerLanguage(codec); getContentManager().registerOntology(ontologia); EnviarMensajeBehaviour EnviarBehaviour = new EnviarMensajeBehaviour(this); addBehaviour(EnviarBehaviour); } protected void takeDown() { try { DFService.deregister(this);} catch (FIPAException fe) {fe.printStackTrace();} }

} //Clase Vendedor

Page 27: Ontologias

27

CUESTIONES Y EJERCICIO

Page 28: Ontologias

28

CUESTIONES ¿Por qué es necesario el uso de Ontologías?

¿Cuáles son las 3 formas que proporciona JADE para llevar a cabo la comunicación entre Agentes?

¿Qué clases se incluyen en el paquete jade.content.schema?

¿Qué lenguajes de contenido soporta JADE? Defínelos brevemente.

Page 29: Ontologias

29

EJERCICIO

Supongamos una ontología para una Universidad, que podemos utilizar para solicitar PFC’s ofertados.

La ontología pfcOntology consta de un Concept (PFC) definido por un título y un codigo.

El agente Profesor le envía al agente Alumno un predicado Oferta para hacerle saber que puede Solicitar el PFC indicado.

pfcOntology(Ontology)

PFC(Concept)

titulo: Stringcodigo: Integer

Oferta(Predicate)

proyecto: PFC

Solicitar(Action)

proyecto: PFC

Page 30: Ontologias

30

NORMAS DE ENTREGA

Enviar el código del ejercicio a: [email protected]

En el email incluir: Nombre y Apellidos DNI Grupo (Bubal, Arenteiro, etc...) Respuesta a las cuestiones y el código modificado.