8.4. Ecriture de bases de connaissances

L'écriture d'une base de connaissances consiste à traduire les différents objets Java d'une base de connaissances AROM selon un formalisme donné. Cette descripton peut être enregistrée et pourra subir l'opération inverse, voir la section Lecture de bases de connaissances, afin d'instancier de nouveau un objet KnowledgeBase.

L'écriture se fait par l'intermédiaire d'objets KBWriter et, tout comme pour la lecture, il existe des objets acceptant des formats AROM différents. L'obtention du KBWriter pour un format précis se fait en appelant la méthode getWriter d'AromSystem avec l'identificateur du format en paramètre.

Mais quelque soit le format choisi, l'objet KBWriter retourné permet d'écrire sur un flux de donné:

Exemple 8-3. Écriture de base de connaissance


import arom.AromSetUp;
import arom.kr.factory.AromSystem;
import arom.kr.model.KnowledgeBase;
import arom.kr.model.AMClass;
import arom.kr.parser.KBWriter;
import arom.kr.model.EntityCreationException;
import java.io.File;
import java.io.IOException;
import java.io.FileOutputStream;

/**
 *
 * Cette exemple montre comment ecrire (sauvegarder) la description d'une base de 
 * connaissances au format AROM.
 * 
 * @author Veronique DUPIERRIS
 */

public class WriteKb {

  /**
   * Cette methode cree une nouvelle base de connaissances nommee "BaseTest" et
   * cree un ensemble de classes dans cette base. 
   *
   * @return l'object KnowledgeBase representant la nouvelle base de 
   * connaissances.
   */
  public static KnowledgeBase createKb(){
    String kbName = "BaseTest";
    AromSystem kbFactory = AromSetUp.getAromSystem();
    KnowledgeBase kb = null;
    try{
      kb = kbFactory.createKB(kbName, new Object[0]);
      AMClass personne = kb.createClass("Personne", null);
      AMClass femme = kb.createClass("Femme", personne);
      AMClass homme = kb.createClass("Homme", personne);	
    } catch(EntityCreationException ece){
      System.out.println("Une erreur est survenue lors de la creation de la base : ");
      System.out.println(ece.getMessage());
      //Arrete la base correctement
      AromSetUp.getAromSystem().cleanup();
      System.exit(1);
    }
    return kb;
  }

  /**
   * Cette methode enregistre la base de connaissances passee en parametre
   * dans le fichier newBase.txta.
   *
   * @param kb La base de connaissance a ecrire.
   */
  public static void writeKB(KnowledgeBase kb){
	
    // recupere une instance de la classe AromSystem qui permet 
    // d'obtenir un Writer permettant l'ecriture d'une base AROM.
    AromSystem aromSystem = AromSetUp.getAromSystem();
    KBWriter kbWriter = aromSystem.getStandardWriter();
    
    File kbFile = new File("newBase.txta");
    try{
      // ouvre une connexion sur ce fichier
      FileOutputStream writer = new FileOutputStream(kbFile);
      //ecrit la base de connaissances au format AROM.
      kbWriter.write(kb, writer);
    }catch(IOException ioe){
      ioe.printStackTrace();
      //Arrete la base correctement
      AromSetUp.getAromSystem().cleanup();
      System.exit(1);
    }
  }
  
  public static void main(String[] args){
    KnowledgeBase kb = createKb();
    writeKB(kb);
    System.out.println("Nom de la KB : "+kb.getName());
    AMClass classFemme = kb.lookupClass("Femme");
    System.out.println("Nom de la Classe : "+classFemme.getName());
    //Arrete la base correctement
    AromSetUp.getAromSystem().cleanup();
  }
  
  
}// WriteKb