sábado, 28 de abril de 2007

Vamos a ver un poco más en profundidad que son cada uno de los principales elementos que conforman una ontología. Para ello nos basaremos en un ejemplo simple que nos permita entender mejor dichos conceptos.

Supongamos que tenemos un sistema de venta de libros en el cual un agente quiere comunicar a otro los libros que oferta. El segundo a su vez quiere ordenar a un tercer agente que compre los libros que elija.

Veamos entonces que elementos compondrán la ontología:

• Conceptos: representas las entidades que forman parte de la ontología, en esta caso la ontología tendrá un concepto que será “Libro”.

• Predicados: son expresiones que relacionan a los conceptos para decir algo. Son necesarios porque un mensaje nunca podremos enviar conceptos, sino que tendremos que enviar predicados o acciones. En el ejemplo usaremos un predicado “Oferta” que indicará que un agente oferta un determinado libro.

• Acciones: son acciones que pueden llevar a cabo los agentes. Para la ontología de libros una acción será “Comprar” que indicará a un agente que debe comprar un determinado libro.

Una vez explicados los distintos elementos, veamos entonces como se implementaría la ontología descrita en JADE:

package librosOntology;

import jade.content.onto.*;
import jade.content.schema.*;

public class librosOntology extends Ontology {
   // Nombre de la ontología
   public static final String ONTOLOGY_NAME = "ontología de libros";

  // Vocabulario de la ontología
  public static final String LIBRO = "Libro";
  public static final String LIBRO_TITULO = "titulo";
  public static final String LIBRO_AUTOR = "autor";
  public static final String LIBRO_PRECIO = "precio";

  public static final String OFERTA = "Oferta";
  public static final String OFERTA_LIBRO = "Oferta_libro";

  public static final String COMPRAR = "Comprar";
  public static final String COMPRAR_LIBRO = "Comprar_libro";

  // Instancia de la ontología
  private static Ontology instancia = new librosOntology();

  // Método para acceder a la instancia de la ontología
  public static Ontology getInstance() {
     return instancia;
   }

   // Constructor privado
   private librosOntology() {
     // librosOntolgy extiende la ontología básica
     super(ONTOLOGY_NAME, BasicOntology.getInstance());

     try {
       // Añade los elementos
       add(new ConceptSchema(LIBRO), Libro.class);
       add(new PredicateSchema(OFERTA), Oferta.class);
       add(new AgentActionSchema(COMPRAR), Comprar.class);

       // Estructura del esquema para el concepto LIBRO
       ConceptSchema cs = (ConceptSchema) getSchema(LIBRO);
       cs.add(LIBRO_TITULO, (PrimitiveSchema) getSchema(BasicOntology.STRING));
       cs.add(LIBRO_AUTOR, (PrimitiveSchema) getSchema(BasicOntology.STRING));
       cs.add(LIBRO_PRECIO, (PrimitiveSchema) getSchema(BasicOntology.INTEGER));

       // Estructura del esquema para el predicado OFERTA
       PredicateSchema ps = (PredicateSchema) getSchema(OFERTA);
       ps.add(OFERTA_LIBRO, (ConceptSchema) getSchema(LIBRO));

       // Estructura del esquema para la acción COMPRAR
       AgentActionSchema as = (AgentActionSchema) getSchema(COMPRAR);
       as.add(COMPRAR_LIBRO, (ConceptSchema) getSchema(LIBRO));
     }
     catch (OntologyException oe) {
       oe.printStackTrace();
     }
   }
}

Como se observa en el código, cada campo de un esquema debe ser de un tipo predefinido, en este caso se usan los tipos primitivos STRING y INTEGER.

Además, cada esquema esta asociado a una clase JAVA, dichas clases se podrían definir tal y como se muestra a continuación:
La clase Libro que implementa el concepto “Libro”, por lo que hereda de Concept:


package librosOntology;

import jade.content.Concept;

public class Libro implements Concept {

   private String titulo;
   private String nombre;
   private int precio;

   public String getTitulo() {
     return titulo;
   }

   public void setTitulo(String t) {
     titulo = t;
   }

   public String getNombre() {
     return nombre;
   }

   public void setNombre(String n) {
     nombre = n;
   }

   public int getPrecio() {
     return precio;
   }

   public void setPrecio(int p) {
     precio = p;
   }
}

La clase Oferta, que implementa un predicado heredando de Predicate:


package librosOntology;

import jade.content.Predicate;

public class Oferta implements Predicate {

   private Libro libro;

   public Libro getLibro() {
     return url;
   }

   public void setLibro(Libro l) {
     libro = l;
   }
}

Y por ultimo la clase Comprar que implementa una acción heredando de AgentAction:

package librosOntology;

import jade.content.AgentAction;

public class Comprar implements AgentAction {

   private Libro libro;

   public libro getLibro() {
     return libro;
   }

   public void setLibro(Libro l) {
     libro = l;
   }
}

Con esto tendríamos definida nuestra ontología para trabajar con ella en JADE. Más adelante veremos como usarla.

1 comentario:

Mario2130 dijo...

y nunca seguiste con la explicación

bueno no se si estoy bien pero a la hora de compilarlo me genera dos errores,
en Comprar y Oferta.
eso ojala algún día termines con la explicación

saludos