8.3. Lecture de bases de connaissances

La lecture d'une base de connaissances est l'opération qui permet d'instancier une base de connaissances AROM à partir de sa description textuelle.

La lecture d'une base AROM est réalisée via un objet de la classe KBReader. Cette classe permet, d'une part, de créer une nouvelle base AROM et de lire son contenu depuis un flux d'entrée donné. Mais elle permet également de lire des informations qui viendront compléter une base AROM existante. Ces informations peuvent appartenir au domaine du modèle, c'est à dire de nouvelles classes ou associations, ou au domaine des instances, tuples ou objets. Un court descriptif de chacune des méthodes proposées dans KBReader est donné ci-après :

Mais avant de lire la description d'une base, ou d'un de ses composants, il est nécessaire de spécifier quel est le format utilisé. Pour cela, l'objet AromSystem offre la possibilité d'obtenir un objet KBReader pour un format donné. Par défaut, les seul formats connu sont le format standard et le format instances. Pour obtenir un KBReader pour ces formats il suffit:

C'est également cette seconde méthode qui sera utilisée pour obtenir des KBReader pour des formats autres. L'exemple qui suit est un exemple de creation/lecture d'une base de connaissances au format standard.

Exemple 8-2. Lecture d'une base de connaissances


/**
 * Cet exemple montre comment creer une base de connaissances a partir
 * de la description de cette base au format AROM. La description de la 
 * base est lue dans un fichier nomme enseignement.txta fourni avec cet
 * exemple.
 *
 * @author Veronique DUPIERRIS
 */
import arom.kr.model.KnowledgeBase;
import arom.kr.factory.AromSystem;
import arom.AromSetUp;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import arom.kr.parser.KBReader;
import helix.util.TestResult;

public class ReadKb {

  /** 
   * Instancie et retourne la base de connaissances dont le contenu est 
   * decrit dans le fichier enseignement.txta.
   *
   * @return un objet KnowledgeBase representant la base AROM 'enseignement'.
   */
  public static KnowledgeBase getSampleKB(){ 
    
    KnowledgeBase enseignant = null;
    
    // recupere une instance de la classe AromSystem qui permet de creer 
    // ou d'ouvrir des bases de connaissances AROM.
    AromSystem factory = AromSetUp.getAromSystem();
    
    try {
      // ouvre une connexion sur le fichier contenant la description de la base
      // 'enseignement'.
      FileInputStream fileEnseignant = 
	new FileInputStream("enseignement.txta");
      KBReader reader = factory.getStandardReader();

      // Affiche les erreurs non bloquantes sur la sortie standard
      reader.displayWarning(true);

      //Utilise un objet TestResult pour tester si l'execution est correcte
      TestResult result = new TestResult();
      
      // lit le contenu de la base depuis la connexion et instancie cette 
      // base en creant les objects Java correspondant aux entites de la base
      // de connaissances.
      enseignant = reader.createKB(fileEnseignant, result);
      if (!result.wasSuccessful())
	System.out.println(" Une erreur s'est produite "+result);
      
    } catch(FileNotFoundException fnfe){
      System.out.println("Le fichier enseignement.txta Introuvable");	    
      fnfe.printStackTrace();
    } catch(IOException ioe) {
      System.out.println("Erreur lors de la lecture de la base");
      ioe.printStackTrace();
    }	
    return enseignant;
  }
  
  public static void main(String[] args){
    KnowledgeBase enseignement = ReadKb.getSampleKB();
    System.out.println("Nom de la KB : "+enseignement.getName());
    //Arrete la base correctement
    AromSetUp.getAromSystem().cleanup();
  }
  
}// ReadKb